This is the “TRAnsparent and Comprehensive model Evaludation” document (TRACE) for the "Extinction dynamics model". Following the principles devised by @schmolkeecological2010, it uses the terminology and document structure presented by @grimmtowards2014 and @augusiakmerging2014. It is organized as a computational notebook to facilitate reproducibility by documenting all analytical process in a transparent fashion (Borregaard & Hart 2016). This documentation is available in the form of code chunks, which can be accessed but are not necessary for comprehension of the contents of the notebook. Figures and tables that are cross-referenced in the main text "Extinction dynamics under multiple perturbations" or inside the TRACE itself are included in the sub-section headers they belong, to facilitate navigation.

## Data processing
library(tidyverse);
library(reshape2);
library(lubridate)
## Data visualization
library(viridis);
library(ggcorrplot);
library(corrplot);
library(RColorBrewer);
library(cowplot);
theme_set(theme_minimal())
## Data analysis
library(FactoMineR);
library(factoextra);
library(missMDA);
library(sp);
library(raster);
## Data source
library(rgbif);
## customize facet names used to id seed sizes 
sizes_facets <- c("Small (1g)", "Medium (2g)", "Big (5g)")
names(sizes_facets) <- c("0.0001", "0.0003", "0.001")
# Formatting and cross-referencing tables and figures
library(knitr)
library(kableExtra)
library(stringr)

## set-up directories
source("../../../set_dirs.R")
## set-up graphical theme
source(file.path(EDMdir,"theme_edm.R"))
###########################################################################################
##                          Data for parametrization of the model                        ##
###########################################################################################
## Pre-processing of LEDA files: metadata was taken away; 
## white-spaces were replace with underscores; 
## and brackets and other special caracteres ("/", "^") were deleted.
# List of species used for parameterization (further details in Appendixes)
spp_list <- read_csv(file.path(traitsdir, "spp_list.txt"), col_names = TRUE);

dispersal_leda <- read_delim(file.path(traitsdir,"LEDA/dispersal_type_clean.txt"), 
                             delim = ";", col_names = TRUE)%>%
  dplyr::select(sp = SBS_name,
                mode_leda = dispersal_type,
                vector_leda = dispersal_vector,
                gen_vector_leda = gen._dispersal_vector,
                gen_type_leda = gen._dispersal_type)

seedmass_leda <- read_delim(file.path(traitsdir,"LEDA/seed_mass_clean.txt"), 
                            delim = ";", col_names = TRUE)%>%
  dplyr::select(sp = SBS_name, 
                diaspore = diaspore_type, 
                single_value = single_value_mg,
                mean_sm = mean_SM_mg, 
                min_sm = minimum_SM_mg, 
                max_sm = maximum_SM_mg)

seednumber_leda <- read_delim(file.path(traitsdir,"LEDA/seed_number_clean.txt"), 
                              delim = ";", col_names = TRUE)%>%
  dplyr::select(sp = SBS_name,
                repro_unit = reproduction_unit_measured, 
                single_value,
                mean_number = average_SNP)

lifespan_leda <- read_delim(file.path(traitsdir,"LEDA/plant_life_span_clean.txt"),
                            delim = ";", col_names = TRUE)%>%
  dplyr::select(sp = SBS_name, leda_span = plant_lifespan)

lifespan_biolflor <- read_csv(file.path(traitsdir,"lifespan_biolflor.csv"),
                              col_names = TRUE)

clonal_leda <- read_delim(file.path(traitsdir,"LEDA/clonal_growth_organs_clean.txt"),
                          delim = ";", col_names = TRUE)%>%
  dplyr::select(sp = SBS_name,
                organ1 = clonal_growth_organ_1,
                organ2 = clonal_growth_organ_2,
                organ3 = clonal_growth_organ_3,
                organ4 = clonal_growth_organ_4)

firstflower_leda <- read_delim(file.path(traitsdir,
                                         "LEDA/age_of_first_flowering_clean.txt"),
                               delim = ";", col_names = TRUE)%>%
  dplyr::select(sp = SBS_name,
                first_flower = age_of_first_flowering,
                min_firstflower = Minumum_years,
                max_fistflower = Maximum_years)

seedbank_leda <- read_delim(file.path(traitsdir,"LEDA/seed_bank_clean.txt"),
                            delim = ";", col_names = TRUE,
                            col_types = cols(
                                .default = col_double(),
                                general_method = col_character(),
                                SBS_name = col_character(),
                                seed_bank_type = col_character(),
                                seed_bank_method = col_character(),
                                max_possible_longevity = col_character(),
                                layer_distribution = col_character(),
                                reference = col_character(),
                                area_unit = col_logical(),
                                area_expressed = col_number(),
                                seed_bank_present = col_logical(),
                                vegetation_present = col_logical(),
                                last_occurrence = col_character()))%>%
    dplyr::select(sp = SBS_name, duration = seed_bank_type)

seedlongevity_leda <- read_delim(file.path(traitsdir,"LEDA/seed_longevity_clean.txt"),
                                 delim = ";", col_names = TRUE,
                                 col_types = cols(
                                     SBS_number = col_double(),
                                     SBS_name = col_character(),
                                     general_method = col_character(),
                                     Trial_number = col_double(),
                                     seed_bank_type = col_character(),
                                     max_longevity = col_double(),
                                     max_possible_longevity = col_character(),
                                     valid = col_double(),
                                     SSB_seed_longevity_index = col_double(),
                                     reference = col_character(),
                                     seed_bank_method = col_character(),
                                     original_reference = col_character()
                                 ))%>%
    dplyr::select(sp = SBS_name, longevity = seed_bank_type)

## Values of minimal and maximal sizes (mass) for 47 species (Weiss et al. 2013)
weisstraits <- read_delim(file.path(traitsdir,"Weiss_etal_2013_OIKOS00957",
                                    "weissetal_appendix3_spplist_clean.txt"),
                          delim = ";", col_names = TRUE,
                          col_types = cols(
                            Species = col_character(),
                            Maximum_plant_mass = col_character(),
                            Growth_form = col_character(),
                            Resource_response = col_character(),
                            Grazing_response = col_character(),
                            Clonality = col_character(),
                            Lateral_spread = col_character(),
                            Integration = col_character(),
                            PFT_ID_ = col_character()))%>%
  dplyr::select(sp = Species, massgroup = Maximum_plant_mass)%>%
  mutate(sp = str_remove(sp, fixed("_L.")))
### table defining groups of size, used for sorting species
weiss_sizegroups <- tibble(massgroup = c("large","medium","small"),
                           weiss_maxmass = c(5,2,1),
                           weiss_seedmass = c(0.001,0.0003,0.0001))
### filtered species from spp_list that have been 
weiss_goetmasses <- inner_join(weisstraits, weiss_sizegroups)%>%
  inner_join(., spp_list)

## Flower phenology
flowerphenology_biolflor <- read_csv(file.path(traitsdir, "biolflor_phenology.csv"),
                                     col_names = TRUE,
                                     col_types = list(col_character(),
                                                      col_character(),
                                                      col_integer(),
                                                      col_integer(),
                                                      col_integer(),
                                                      col_integer()))

## Species dispersal kernels
dispersal_ve <- read_csv(file.path(traitsdir, "dispersaldistance_vittozengler_2007.txt"),
                         col_names = TRUE,
                         col_types = cols(
                             sp = col_character(),
                             max_dist_ve = col_character(),
                             disp_mode_ve = col_character(),
                             genus_max_dist_ve = col_double(),
                             genus_mode_ve = col_character()
                         ))

## Time-series of temperature in Göttingen
DWDdata <- read_delim("temperature_series/produkt_klima_monat_18570101_20171231_01691.txt",
                      col_names = TRUE,
                      delim = ";",
                      col_types = cols(
                          STATIONS_ID = col_character(),
                          MESS_DATUM_BEGINN = col_double(),
                          MESS_DATUM_ENDE = col_double(),
                          QN_4 = col_character(),
                          MO_N = col_character(),
                          MO_TT = col_character(),
                          MO_TX = col_character(),
                          MO_TN = col_character(),
                          MO_FK = col_double(),
                          MX_TX = col_double(),
                          MX_FX = col_double(),
                          MX_TN = col_double(),
                          MO_SD_S = col_double(),
                          QN_6 = col_character(),
                          MO_RR = col_character(),
                          MX_RS = col_double())) %>%
    dplyr::select(MESS_DATUM_BEGINN,
                  MESS_DATUM_ENDE,
                  monthT = MO_TT)
  
tempseries_goettingen <- read_csv("temperature_series/temperaturegoettingen_18571917.csv",
                                  col_names = TRUE,
                                  col_types = cols(
                                      week = col_double(),
                                      meantemp = col_double(),
                                      begin_date = col_date(format = ""),
                                      week_year = col_character(),
                                      week_inyear = col_double()
                                  )) %>%
    mutate(meantemp_K = meantemp + 273.15)

## Pollination vectors
pollination <- read_csv(file.path(traitsdir, "biolflor_pollination.csv"), 
                        col_names = TRUE,
                        cols(species = col_character(),
                             pollen_vector = col_character(),
                             self_proba = col_double(),
                             selfing_at_failoutcross = col_logical()))

## Base values of germination and mortality rates of grassland plant species
marba <- read_csv(file.path(traitsdir, "birth_death_marba.csv"),
                  col_names = TRUE,
                  cols(
                      sp = col_character(),
                      mortalityrate = col_double(),
                      birthrate = col_double(),
                      temp = col_double()
                  ))

## bioclimatic data
bioclim_edm.df <- read_csv(file.path(traitsdir, "bioclim_edm.csv"),
                           col_names = TRUE,
                       col_types = cols(species = col_character(),
                                        temp_opt = col_double(),
                                        tmean_sd = col_double(),
                                        tmin_min = col_double(),
                                        tmax_max = col_double(),
                                        temp_tol = col_double()))

## Data frames for validation
edm_traits <- read_csv(file.path(EDMdocsdir, "spp_traits" ,"EDM_spptraits.csv"),
                       col_names = TRUE)


###########################################################################################
##                                      Internal objects                                 ##
###########################################################################################

## italics of species names
mk_itspp <-function(df){
    if("sp" %in% names(df)){
        df <- rename(df, species = sp)}
    df %>%
        mutate(species = str_replace(species, pattern = "_", replacement = " ")) %>%
        mutate(species = paste0("*", species, "*"))
}

## Constants and base value of the Metabolic Theory of Ecology
aE <- 0.63 # activation energy
Boltz <- 8.62*(10^(-5)) # Boltzmann constant

## global parameters
odd_globalpars.df <- read_csv(file = file.path(EDMdocsdir, "tables/odd_globalpars.csv"),
                           col_names = TRUE,
                           col_types = cols(.default = col_character()))

## table of dispersal kernels
kernels.df <- read_csv("tables/dispersal_kernels.csv", col_names = TRUE,
                           col_types = cols(.default = col_character()))
## table of state variables of the model
state_vars.df <- read_csv(file = file.path(EDMdocsdir, "tables/odd_statevars.csv"),
                          col_types = cols(.default = col_character()))

disp_groups.df <- read_csv(file = file.path("tables/dispersal_groups.csv"),
                           col_names = TRUE,
                           col_types = cols(.default = col_character()))
###########################################################################################
##                                 Dataframes for validation                             ##
###########################################################################################
dens_raw.df <- read_csv(file.path(EDMdocsdir, "validation/vegoekol2Quadrate_copy.csv"),
                        col_names = TRUE, col_types = cols(.default = col_double(),
                                                           Name = col_character())) %>%
    mutate_at(vars(-Name),funs(replace_na(., 0))) %>%
    rename(fragment = Name)
## Warning: `funs()` is deprecated as of dplyr 0.8.0.
## Please use a list of either functions or lambdas: 
## 
##   # Simple named list: 
##   list(mean = mean, median = median)
## 
##   # Auto named with `tibble::lst()`: 
##   tibble::lst(mean, median)
## 
##   # Using lambdas
##   list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
denssumm_raw.df <- read_csv(file.path(EDMdocsdir,
                                      "validation/vegoekol2Quadrate_summ_copy.csv"),
                            col_names = TRUE,
                            col_types = cols(.default = col_double(),
                                             Name = col_character())) %>%
    rename(fragment = Name)

# traitspace from simulated communities
scen_wgtmean.df <- read_csv(file.path(semiproductsdir, "masswgttraits.csv"),
                            col_names = TRUE)
### function for trait analyses in "Validation"
get_pcaoutputs <- function(tab4pca, traitnames.dict){
    res.pca <- PCA(tab4pca,  scale.unit = TRUE, graph = FALSE)
    scree.plot <- fviz_eig(res.pca, ncp = 5, addlabels = TRUE,
                           barcol = "#CFaFD6", barfill = "#CFaFD6")
    pca.inds <- get_pca_ind(res.pca)
    ##     Principal Component Analysis Results for variables
    ##  ===================================================
    ##   Name       Description                                    
    ## 1 "$coord"   "Coordinates for the variables"                
    ## 2 "$cor"     "Correlations between variables and dimensions"
    ## 3 "$cos2"    "Cos2 for the variables" = quality of representation in the factor map                   
    ## 4 "$contrib" "contributions of the variables" (in percentage)               
    pca.vars <- get_pca_var(res.pca)
    
    ## name variables with more identifiable names
    dimnames(pca.vars$coord)[[1]] <- traitnames.dict[dimnames(pca.vars$coord)[[1]]]
    pca.vars$coord <- pca.vars$coord[order(rownames(pca.vars$coord)), order(colnames(pca.vars$coord))]
    
    dimnames(res.pca$var$cos2)[[1]] <- traitnames.dict[dimnames(res.pca$var$cos2)[[1]]]
    res.pca$var$cos2 <- res.pca$var$cos2[order(rownames(res.pca$var$cos2)), order(colnames(res.pca$var$cos2))]
    cos2vars.plot <- fviz_pca_var(res.pca, col.var = "cos2", title = "Quality of representation of variables",
                                  reppel = TRUE) +
        theme_edm() +
        theme(legend.position = "right")

    dimnames(res.pca$var$contrib)[[1]] <- traitnames.dict[dimnames(res.pca$var$contrib)[[1]]]
    res.pca$var$contrib <- res.pca$var$contrib[order(rownames(res.pca$var$contrib)),
                                               order(colnames(res.pca$var$contrib))]
    contribvars.plot <- fviz_pca_var(res.pca, col.var = "contrib", reppel = TRUE,
                                     title = "Variables contributions to PCs") +
        theme_edm() +
        theme(legend.position = "right")
    
    dimnames(pca.vars$cor)[[1]] <- traitnames.dict[dimnames(pca.vars$cor)[[1]]]
    pca.vars$cor <- pca.vars$cor[order(rownames(pca.vars$cor)), order(colnames(pca.vars$cor))]
    corrvars.plot <- ggcorrplot(pca.vars$cor,
                                colors = c("#FDE725FF", "#f7f7f7", "#440154FF")) +
                                        ## extremes taken from viridis(n = 2, option = "D")
        theme_edm() +
        theme(axis.title = element_blank(),
              axis.text.x = element_text(angle = 70, hjust = 1),
              axis.ticks = element_blank())
    
    dimnames(res.pca$var$coord)[[1]] <- traitnames.dict[dimnames(res.pca$var$coord)[[1]]]
    res.pca$var$coord <- res.pca$var$coord[order(rownames(res.pca$var$coord)),
                                           order(colnames(res.pca$var$coord))]
    contribvars.barplot <- fviz_contrib(res.pca, choice = "var", axes = 1:2, color = "grey77") +
        theme_edm() +
        labs(x = "Variable") +
        theme(axis.text.x = element_text(angle = 75, hjust = 1))

    ## diagnostic plot
    scree_corr.plots <- plot_grid(plot_grid(corrvars.plot,scree.plot, 
                                            ncol = 2, rel_widths = c(3,1), labels = c("A", "B")),
                                  plot_grid(contribvars.plot, cos2vars.plot,
                                            ncol = 2, labels = c("C", "D")),
                                  nrow = 2, rel_heights = c(1,1.5))
    
    return(list(pca = res.pca, scree.plot = scree.plot, pca.vars = pca.vars, pca.inds = pca.inds,
                cos2vars.plot = cos2vars.plot, contribvars.plot = contribvars.plot,
                corrvars.plot = corrvars.plot, contribvars.barplot = contribvars.barplot,
                scree_corr.plots = scree_corr.plots))

}
traitnames.dict <- list(bankduration = "Seedbank duration",
                        clonality_TRUE = "Reproduction: clonal", 
                        clonality_FALSE = "Reproduction: not clonal",
                        compartsize = "Biomass: allocation compart. size",
                        firstflower = "Flowering: start age",
                        floron = "Flowering: begin",
                        floroff = "Flowering: end",
                        kernel_long = "Dispersal: long",
                        kernel_medium = "Dispersal: medium",
                        kernel_short = "Dispersal: short",
                        'kernel_short-long' = "Dispersal: short/long",
                        'kernel_short-medium' = "Dipersal: short/medium",
                        'kernel_medium-long' = "Dipersal: medium/long",
                        'kernel_long-medium-short' = "Dispersal: all kernels",  
                        pollen_vector_wind = "Reproduction: wind poll.",
                        pollen_vector_insects = "Reproduction: insect poll.",
                        'pollen_vector_wind-insects' = "Reproduction: wind/insect poll.",
                        self_failoutcross_TRUE = "Reproduction: selfing (failed outcross)",
                        self_failoutcross_FALSE = "Reproduction: no selfing",
                        self_proba = "Reproduction: probability of selfing",
                        seedmass = "Biomass: seed size",
                        seednumber = "Seed number",
                        seedon = "Seed release: begin",
                        seedoff = "Seed release: end",
                        span = "Lifespan")

1 Problem formulation

Summary

When an ecosystem undergoes a perturbation, species extinctions are not necessarily immediate. Extreme events excluded, e.g. a volcanic island explosion, when species might be immediately extirpated @quammensong1996, in most cases, it can take up to many decades for most extinctions to happen @figueiredounderstanding2019, because species have different capabilities to survive in disturbed conditions. Metapopulation dynamics and resistance traits grant such capabilities [@saarwhich2012, @saartrait2017]. The number of such extinctions, which are bound to happen in the future is known as the “extinction debt” [@tilmanhabitat1994, @kuussaariextinction2009]. The it takes for these extinction debts to happen is known as the "relaxation time" @diamondbiogeographic1972. This concept implies that, while these extinctions have not happened, i.e. the debt has not been paid by the ecosystem, extinctions can also be both accelerated and delayed by eco-evolutionary processes happening at different levels of the community (i.e., individual, populational, and community). Moreover, conservation measures could be planned to avoid them. To elucidate the relative importance of these processes, we build an individual-based model to simulate and characterize community response to different kinds of habitat perturbation at different ecological levels.

1.1 Motivation

The model is designed to elucidate how ecological processes in a plant-insect community are affected by ecosystem disturbance, and how they affect extinction dynamics. More specifically, we are interested at how species dispersal capacity and reproductive strategy, for example, delay or accelerate species extinctions.

1.2 Questions

With this model, we aim at answering the following questions:

  1. How does the regime of disturbance affects extinction debt and relaxation time?

Abiotic perturbations cause biotic perturbations (e.g., pollination loss) as a secondary effect. The secondary perturbations amplify the effects of the primary disturbances alone. Thus, predictions of extinction debts and relaxation time that only consider isolated abiotic perturbations yield underestimations.

  1. Which traits allow species to survive through the payment of the debt?

Following disturbance, initial species survival depends on the severity of the extinction-causing disturbance, and on the species abundance. During the relaxation process, community reassembly and microevolution affect are the main factors for species survival. Both processes either arise from (community reassembly) or affect (microevolution) species trait spaces. Our objective is, thus, to describe the change in community trait space during the relaxation process.

1.3 Use and applicability

The model is suited for theoretical explorations of eco-evolutionary dynamics.

2 Model description

Summary: This is a complete version of the model description presented in @figueiredoinprep.

2.1 Overview

2.1.1 Purpose

The model simulates the effects of abiotic and biotic perturbations on i) plant species richness and population dynamics, and ii) community trait space.

2.1.2 Entities, state variables and scales (Table S@ref(tab:statevars))

The model simulates the life cycle of plants in a landscape. Plant individuals are characterized by state variables and species traits (Table @ref(tab:statevars), which are used as parameters values in the simulation of the individual’s life cycle (detailed in the next section, Process overview and scheduling).

The landscape is represented as a grid of cells. Each grid cell has an area of 1 m² and represents either suitable or unsuitable habitat (Table @ref(tab:statevars)). There is no upper limit on the size of landscape (minimal size would be 1 m²), but increasing the size of the landscape allows more individuals to occupy and thus, can be decrease the speed of simulations. The configuration of these cells in the grid is defined by the input, thus, by the experimental design. Temperature is a global variable in the model (all patches are subjected to the same temperature). The temperature is used to calculate the biological rates of the organisms being simulated (germination, growth, and mortality, each detailed in the Submodels section). The model runs on weekly discrete time-steps to account for the seasonality of management (mowing) and species phenology. The species to be included in the simulation, the landscape configuration, the regime of perturbation (type of perturbation, time of occurrence, and magnitude), and total duration of the simulation are determined by the user-defined experimental design (details in the Input and Disturbance submodel sections).

state_vars.df%>%
  knitr::kable(caption = "Entities and their respective state variables in the model. Variables marked with (*) can evolve as described in the Microevolution submodel. Species specific parameters must be provided as input. The criteria regarding the selection and attribution of the respective values is described in the sections listed below.",
               longtable = TRUE, booktabs = TRUE) %>%
  collapse_rows(columns = , valign = "top") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) ## %>%
Entities and their respective state variables in the model. Variables marked with (*) can evolve as described in the Microevolution submodel. Species specific parameters must be provided as input. The criteria regarding the selection and attribution of the respective values is described in the sections listed below.
Entity State variable (unit) Scope
Plant Species Species name
Developmental stage Temporary status
Age(weeks)
Vegetative biomass of leaves (g)
Vegetative biomass of stem (g)
Vegetative biomass of roots (g)
Reproductive biomass (g)
Pollination status
Life span (weeks)* Species specific parameter
Age of first flowering (weeks)*
Beginning of flowering season (week of year)
End of flowering season (week of year)
Pollination vector
Beginning of sowing season (week of year)
End of sowing season (week of year)
Dispersal kernel
Clonal ability
Seed mass (g)
Capacity of selfing at fail of outcrossing
Probability of selfing upon pollination
Maximal number of seeds (weeks)*
Seed-bank duration (weeks)*
Temperature optimum
Temperature tolerance
Germination proportionality constant \((week^{-1})\)
Mortality proportionality constant \((week^{-1})\)
Biomass growth proportionality constant \((g/week^{-1})\)
Landscape grid cell Habitat suitability Experimental design
  ## kable_styling(full_width = FALSE) %>%
  ## column_spec(1, width = "1.5cm") %>%
  ## column_spec(2, width = "10.5cm") %>%
  ## column_spec(3, width = "9cm")

2.1.3 Process overview and scheduling (Figure S@ref(fig:flowchart))

At each time-step, each individual goes through its life cycle processes, which vary according to the life history strategy determined by the individual's traits and current developmental stage (Table @ref(tab:statevars)), i.e., seeds, juveniles and adults go through different processes (Fig. @ref(fig:flowchart)).

knitr::include_graphics(file.path(EDMdocsdir,"figures/model_flowchart.png"))
Flowchart of the processes simulated by the model for each individual plant. The biological processes differ between individuals according to state variables such as stage (as identified by the line type), or phenology (e.g.flowering season). The circumstances where state variables control the outcome of certain biological processes, namely pollination, maturation, germination, or excesive growth (biomass_{cell} > K_{cell} refers to the biomass production being over the landscape carrying capacity) can also determine the course of an individual's life cycle.

Flowchart of the processes simulated by the model for each individual plant. The biological processes differ between individuals according to state variables such as stage (as identified by the line type), or phenology (e.g.flowering season). The circumstances where state variables control the outcome of certain biological processes, namely pollination, maturation, germination, or excesive growth (\(biomass_{cell} > K_{cell}\) refers to the biomass production being over the landscape carrying capacity) can also determine the course of an individual's life cycle.

The processes simulated in the model are the following (scheduling is depicted in Fig. @ref(fig:flowchart), and further details are described in Details section):

Management: Annually, the effects of management (mowing or grazing) are simulated as the reduction of above-ground biomass of juvenile and adult plants.

Biomass growth and resource allocation: Whole organism biomass production is calculated according to metabolic theory of ecology (MTE, [@ernestthermodynamic2003; @browntowards2004]). The total production is allocated to vegetative or reproductive structures, according to the individual's developmental stage and phenology. Juveniles and non-reproducing adults can only accumulate vegetative biomass, which is equally divided among "root", "stem", and "leaves" organs. During their species-specific reproductive season, determined by the phenological traits of start and end of flowering season, adults allocate biomass production to reproductive structures if they have reached a species-specific minimal vegetative biomass.

Maturation of juveniles: Juvenile individuals become adults once they reach their age of first flowering, a species-specific phenological trait.

Mortality: The probability of density-independent mortality is calculated for each individual, according to the metabolic theory of ecology (@browntowards2004). Density-dependent mortality is calculated once total vegetative standing biomass production surpasses the carrying capacity. Individuals die acccording to the species local (at the grid cell level) relative adaptation to temperature (fitness).

Pollination is implicitly simulated as pollination service, i.e., a plant is to sexually produce offspring only if it has been pollinated. Plants can be pollinated if they have enough reproductive biomass to produce at least one seed. The number of individuals being pollinated depends upon the number of individuals visited, pollination efficiency of the vector, and on the regime of pollination, all defined by the experimental design.

Sexual reproduction happens for individuals that have been pollinated. Trait inheritance is calculated for seeds thus produced (described below). Species also have a species-specific probability of selfing, in which case, no trait inheritance is calculated. The number of seeds produced depends on the species-specific seed weight and on the amount of reproductive biomass of the mother plant, and it is limited to species-specific values of maximal weekly seed production.

Asexual reproduction is simulated for clonal plants that do not get pollinated. Clonality is a species-specific trait. Probability of clone production is a global parameter (Table @ref(tab:globalpars)), and at most one clone is produced per cloning plant. Clones are initialized as juveniles, in the same location as the plant generating it.

Trait inheritance is simulated upon sexual reproduction through a simplified model of phenotypical change of a population under panmixia. Clones and seeds produced through selfing are exact copies of the plants that produced them.

Seed dispersal: Seeds can be dispersed at short (0.1-100 m), medium- (100-500 m), and long-distances (1-10km), accoding to the species-specific dispersal parameters. The phenology of seed release is also a species-specific trait (Table @ref(tab:statevars)).

Seed germination is only possible in grid-cells labelled "suitable". Seeds that fall outside the landscape or in unsuitable grid-cells are considered dead and discarded from the simulation. The probability of seed germination is calculated for each individual, according to the MTE. If a seed is successful, it turns into a juvenile.

Shedding: At the end of the flowering season, adult plants lose all their reproductive biomass.

Winter dieback: At the last week of the year, adults lose all of the biomass allocated to leaves, and 50% of the biomass allocated to stem.

Disturbances can happen as temperature change, loss of habitat area, fragmentation, and loss of pollination. Temperature change is simulated if the obligatory the input of a temperature time series depicts the change. Loss of habitat area is simulated by the input of a proportion of habitat to be marked as "unsuitable" or by providing a raster file with the new habitat configuration, and the frequency of change, i.e. the time steps when the change happens. Fragmentation is only simulated through raster file(s) of the new habitat configuration. Loss of pollination is simulated by an input defining the intensity (\((0,1]\)), the frequency, and the specificity (i.e. which species are affected) of loss.

2.1.4 Table S@ref(tab:globalpars)

odd_globalpars.df %>%
    knitr::kable(caption = "Global parameters of the model, their respective values, and references used to define them.",
                 longtable = TRUE, booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Global parameters of the model, their respective values, and references used to define them.
Global parameter Value References
Beginning of management season \(31^{st} week\) (first week of August) Kormann et al. (2015)
End of management season \(39^{st}\) (last week of September) Kormann et al. (2015)
Probability of selfing at fail of outcrossing 50% Arbitrary value
Allocation of reproductive biomass to seed production 50% Arbitrary value
Proportion of plants visited by pollinators 1 Arbitrary value
Efficiency of insect pollination 60% King et al. (2013)
Efficiency of wind pollination 60% Arbitrary value
Short-dispersal kernel \(\mu = 1, \lambda = 0.2\) Vittoz & Engler (2007), Bullock et al. (2017)
Medium-dispersal kernel \(\mu = 0.2, \lambda = 3\) Vittoz & Engler (2007), Bullock et al. (2017)
Short-dispersal kernel \(\mu = 1000, \lambda = 100\) Vittoz & Engler (2007), Bullock et al. (2017)
Boltzmann constant 8.65-e5 -eV/K Brown et al. (2004)
Activation energy 0.63 -eV Brown et al. (2004)
Landscape carrying capacity 5T/ha Bernhardt-Romermann et al. (2011)
  #kable_styling(full_width = FALSE)

2.2 Design concepts

2.2.1 Basic design principles

The basic principle of the model is to capture how habitat change affects the individual, population and community levels of an ecosystem and how those processes contribute to the size of extinction debts and relaxation times. For its ability to scale individual level effects to community level patterns, the metabolic theory of ecology (MTE, @browntowards2004) was chosen as the guiding principle for calculating biological rates.

2.2.2 Emergence

Metapopulation and metacommunity dynamics arise from the local population dynamics and from species-specific dispersal abilities. Population dynamics results from individual biological demographic rates (biomass growth - both vegetative and reproductive biomass, germination, and mortality) that are calculated according to the MTE. Species coexistence arises from species density-dependent mortality depending on species relative adaptation to local temperature (fitness), where such limitation works as a local stabilizing mechanism. Competition arises from species relative fitness being updated locally, at every time step. Thus, extinct species leave open spaces that might be occupying by the surviving ones, according to their relative fitness.

2.2.3 Interactions

Organisms interact with the environment because all vital rates depend on local temperature, as determined by MTE. Plants also compete for space, since species local fitness limits its biomass growth.

2.2.4 Stochasticity

Reproduction, seed dispersal, germination and density-independent mortality are stochastic processes. The probability distribution used in each process is specified in their respective sub-model description. Mortality is specific for adult individuals older than their species lifespan, and for seeds falling in unsuitable habitat, or older than their seed bank duration. Density-dependent mortality is deterministic for small individuals of species going over their carrying capacity.

2.2.5 Observations

To keep track of extinction arising at different ecological levels (individual, population or community), the model outputs all state variables of each individual being simulated (Table @ref(tab:statevars)) at user-defined intervals. From these outputs, the model readily summarizes species diversity, population dynamics (abundance and struture), biomass allocation, and life-history events (at the community level, not for each species). Other analysis can be derived by the user with the same file.

2.3 Details

2.3.1 Initialization

Simulations are defined by the landscape configuration, the species pool, the climatic conditions (temperature) and the type of disturbance. Landscape configuration determines which grid cells constitute suitable habitat and can, therefore, be occupied. Initial temperature (temperature is a global variable of the model) is read from an input file and updated at every time step (the file contains a time-series of weekly temperatures). Individuals are created according to the list of species list given as input. Upon initialization, each individual is randomly placed in the landscape and receives an individual identification tag. The individual's grid location is recorded because it is relevant for the calculation of density-dependent mortality (detailed in the Density-dependent mortality section). The individual's trait values (\(v\)) are read from the species list input (Table @ref(tab:statevars)), except for values of seed number, seed bank duration, life span and age of first flowering. These values are highly variable (see Data evaluation section). Thus, the values for these traits are drawn from an Uniform distribution, \(v\sim\mathit{U}(v_{min}, v_{max})\), where \(v_{min}\) and \(v_{max}\) are the minimal and maximal trait values given in the species list input file. Individuals that are initialized at random stages ("seed", "juvenile", or "adult"). Juveniles have the same biomass as seeds, since they are considered young seedlings, with four weeks old. Adults are initialized with 75% of the species maximum adult biomass and have the age of first flower of the species.

2.3.2 Input

Simulation scenarios are user-defined, and most parameters are specified in input files. Table @ref(tab:parse_settings) lists such files, its contents, formatting, and how they should be parsed to the model. A simulations requires:

  1. Species list and trait values: The list of the species to be initialized, their respective trait values, and initial abundances (Table @ref(tab:statevars)). Details on the species and trait values data used to develop the model under Data evaluation.
  2. Initial landscape configuration: A raster file with binary values coding for habitat availability).
  3. Time series of temperature variation: temperature values (°C) to be assigned for all grid cells, for each week of simulation. The total duration of simulation is determined by the length of the time-series. Details on the time-series data used to develop the model are provided under Environmental characteristcs in Data evaluation.
  4. Type, time and magnitude of environmental disturbance: A dedicated setting identifies the type of disturbance, if any, tp be simulated. Frequency and magnitude are provided in dedicated files:

    • to simulate temperature change, the time series (item 3) should contain the temperature values to be used.
    • to simulate area loss or fragmentation, the file must inform the time step(s) of change, and the respective proportion of area to be lost, or the raster file(s) containing the new configuration.
    • to simulate pollination loss, the file must inform the regime of pollination loss, the time steps when it happens, and how much pollination remains available.

Details on the contents of these files and how they are implemented are available in the descriptions of each disturbance submodel).

2.3.3 Submodels

All biological rates in the model, namely biomass growth, germination, and (density-independent) mortality, are calculated according to the metabolic theory of ecology [@browntowards2004]: \[\begin{equation} B = b_{0}.m^\alpha.e^{\frac{-E}{k.T}} (\#eq:mte-B) \end{equation}\] where \(B\) is the metabolic rate, \(b_{0}\) is a taxon and stage-specific proportionality constant, \(m\) is the individual's body mass, \(\alpha\) is an allometric exponent, \(E\) is the activation energy, \(k\) is the Boltzmann constant, and \(T\) is the local temperature. Values of \(\alpha\), \(E\), and \(k\) are constants from the metabolic theory of ecology [@browntowards2004, @siblylife2012] Table @ref(tab:globalpars). The proportionality constant \(b_{0}\) is specifically parameterized for each process to generate (biologically) realistic rate values. We describe this parameterization in the Metabolic biological rates section of Data evaluation). Biological rates are converted into individual probabilities (of germination and mortality, only) as \[\begin{equation} p = 1 - e^{-B} (\#eq:mte-prob) \end{equation}\]

2.3.3.1 Management

Annually, the effects of management (mowing or grazing) are simulated as the reduction of above-ground biomass of juvenile and adult plants. The regime of mowing, i.e. the period of the year when it occurs, the probability of occurence, and the maximum annual number of occurence, is defined by the experimental design (example described in the Management section of Data evaluation). Only individuals that have accumulated at least 50% of the species maximal vegetative biomass (biomass allocated to stems and leaves) have their vegetative reduced to 50% of its maximal values and lose all reproductive biomass.

2.3.3.2 Biomass growth & Resource allocation

An individual's biomass (\(m\)) is calculated as \[\begin{equation} m_{t+1}=m_t+g(t)\\ g(t)=B_{growth}\times(m_{max}-{m}_{t}) (\#eq:mass-growth) \end{equation}\]

where \(g(t)\) calculates the total biomass production at a time-step \(t\), \(m_{max}\) refers to the species total maximal biomass (vegetative and reproductive), and \(B_{growth}\) is the rate of growth (Eq.@ref(eq:mte-B)). This growth function approaches the S-shaped Richards growth curve (@Richards 1959) parameterized according to the species minimal and maximal sizes, and age of first flowering (detailed in the Biomass growth rates section of Data evaluation).

The total production is allocated to vegetative or reproductive organs according to the allometric relationship between plant organs biomasses devised by @niklasenquistcanonical2002, to the individual's developmental stage, and to the species' reproductive phenology. The allometric relationship devised by @niklasenquistcanonical2002 states that standing leaf biomass scales as the 3/4-power of stem biomass and that stem and root biomasses scale isometrically in relation to each other, i.e. \(M_{leaf} ~ M_{stem}^{3/4} ~ M_{root}^{3/4}\). Moreover, the growth rates of the three biomass organs also scale isometrically, i.e. \(B_{leaf} ~ B_{stem} ~ B_{root}\). Thus, biomass growth is equally divided among all vegetative organs ("root", "stem", and "leaves") during vegetative growth. Juveniles and non-reproducing adults can only accumulate vegetative biomass. During their species-specific flowering season (determined by the phenological traits of start and end of flowering season Table @ref(tab:statevars)), adults allocate biomass production to the "reproductive" organs, if they have reached at least 50% of the species maximal size. Otherwise, they allocate to vegetative structures, as described above.

2.3.3.3 Maturation of juveniles

Juvenile individuals become adults once they reach their species-specific age of first flowering.

2.3.3.4 Mortality

Biomass growth and mortality are calculated in sequence, separately for adults and juveniles (Fig. @ref(fig:flowchart)). Only density-independent mortality is calculated for seeds.

Density-independent mortality is calculated for all individuals, except seeds that are still attached to the mother plant. Mortality rate, \(B_{mort}\), and probability, \(p_{mort}\), are calculated according to the MTE (Eq. @ref(eq:mte-B) and @ref(eq:mte-prob)). Individuals that are older than their maximal lifespan (always adults, see Maturation) are killed deterministically. Details on the parametrization of the normalization constant are described under the Mortality rates section of Data evaluation.

Density-dependent mortality is calculated once the total standing biomass in a grid-cell \[\begin{equation} M_{total} = \sum_{x=i}^{n_{cell}} m_i \end{equation}\] (\(n_{cell}\) being the total number of individuals in the cell) is higher than its carrying-capacity (\(K_{cell}\)), a global, constant value defined by the experimental design (an example is given in the Data evaluation section. Mortality is then simulated only for the species whose specific share of the total standing biomass production (\(M_{sp} = \sum_{x=i}^{n_{sp}} m\), \(n_{sp}\) being the number of individuals of the species) is above its relative carrying capacity (\(K_{cell_{sp}}\)). A species (\(K_{cell_{sp}}\)), i.e. its maximal standing biomass production inside a cell, depends on its temperature niche, defined by species-specific, non-evolving temperature optimum (\(T_{opt}\)) and tolerance values (\(T_{tol}\)). The temperature niche is modelled as a Gaussian function (\(f(T)\), with maximum value \({f}_{max} = f(T_{opt}) = 1\), and \(sd = T_{tol}\), \[\begin{equation} f(T) = {f}_{max} \times \exp(\frac{-(T-T_{opt})^2}{2 \times {T}_{tol}^2}) (\#eq:fitness) \end{equation}\]

where \(T\) is the mean temperature calculated over the same time period as the optimum and tolerances were defined, which is the same time period over each fitness is updated. Species temperature niches are defined by the experimental design and an example of how we defined it is described in the respective section of the [Data evaluation][#species-temperature-niche].

A species relative carrying-capacity is then, \[\begin{equation} K_{cell_{sp}} = \frac{f_{sp}(T)}{\sum_{x=i}^{spp_{cell}} f_i(T)} \times K_{cell} \end{equation}\]

where \(f_{sp}\) is the species absolute fitness value, and \(spp_{cell}\) are the species in the cell.

Thus, once \(M_{sp} > K_{cell_{sp}}\), individuals are ranked according to total biomass, and smaller (independent of stage, juvenile or adult) are killed first, until \(M_{sp} \le K_{cell_{sp}}\). Since the MTE predicts that smaller individuals have higher metabolic rates, we avoid the computational burden of drawing random processes (as it happens for density-independent mortality) by eliminating smaller individuals first.

2.3.3.5 Pollination

The occurrence of pollination is a stochastic process that depends on the availability of pollination service, which is determined by the experimental design and affects the total number of individuals that will produce offspring sexually.

The number of pollinated \(n_{poll}\) individuals is calculated (per species) from all the flowering plants with enough reproductive biomass to produce at least one seed (\(n_{repr}\)). Flowering plants are adult individuals that are in their reproductive season, a species specific trait determined (an example is decribed in Data evaluation), and the proportion of reproductive biomass available for seed production is determined by a global constant defined by the experimental design (Table @ref(tab:globalpars)). The number of effectively pollinated plants is drawn from a Binomial distribution \[\begin{equation} n_{poll} \sim\mathit{B}(n=n_{repr}\times{p}_{visit},p=p_{eff}) \end{equation}\]

where \(p_{visit}\) is the proportion of visited flowers, and \(p_e\). Both are global constants in the model (Table @ref(tab:globalpars)). In the absence of disturbance, \(n_{poll}\) individuals of the species are identified as having been pollinated and can thus, produce seeds. Pollination disturbance decreases \(n_{poll}\) according to the pollination scenario, whose implementation is detailed in the Pollination loss submodel description.

2.3.3.6 Sexual reproduction

The number of seeds produced at each reproductive event is calculated as \(n{seeds} = m_{repr}/m_{seed}\), where \(m_{repr}\) is the amount of reproductive biomass and \(m_{seed}}\) is the species-specific seed weight. The amount is limited by the species weekly maximal number of seeds, i.e., even if the plant has enough biomass to produce more than its maximum, it will not. The species weekly maximal number of seeds is a trait value given as input to the model (an example is described in the Seed number section of Data evaluation). Species have a species-specific probability of selfing upon pollination. Moreover, some species can resort to selfing in case they are not pollinated. For such species, there is a global probability of success (Table @ref(tab:globalpars)). The trait values of the offspring are calculated according to a simplified model of phenotypical change of a population under panmixia (described below). After offspring production, the reproducing plant loses biomass from its reproductive compartment equivalent to the weight of all the seeds produced.

2.3.3.7 Asexual reproduction

A clonal plant that has not been pollinated has a global probability of generating a ramet (Table @ref(tab:globalpars)). The clone is initialized as a juvenile, in the same grid cell as the mother-plant, weighing 10% of the species total maximal biomass. Thus, clonality is a global strategy to assure seedling establishment .

2.3.3.8 Trait inheritance

Offspring inherits its trait values according to the type of reproduction it is generated from. For sexually, non-selfing, generated seeds, the new trait value \(v\) of evolvable traits (Table @ref(tab:statevars)) is calculated as \[\begin{equation} v=\frac{v_{mother}+v_{mother}}{2}+\mathit{N}(0,|\frac{(v_{mother}-v_{father})}{6}|) \end{equation}\]

where \(v_{mother}\) is the trait value of the plant originating the seed and \(v_{father}\) is the trait value of a conspecific plant randomly chosen in the population. By using \((v_{mother}-v_{father})/6\), the introduced variability in trait hereditability is limited to the difference between the parent's values. The resulting trait value, however, is limited by the species minimal and maximal values, \(v_{min}\) and \(v_{max}\), given as input. Individuals generated through selfing and cloning inherent the same set of traits as the plant producing them.

2.3.3.9 Seed dispersal

During the reproductive season, seeds are produced, but not necessarily dispersed. Seed dispersal during species-specific seed release season. The model simulates kernel-based dispersal. Kernel parameters characterize the distribution of distances achieved by the species mode of dispersal.

Dispersal is simulated by drawing a random radian angle \(\theta=[0-2\times\pi\)) from Uniform distribution, and drawing the dispersal distance \(dist_{disp}\) from the species' dispersal kernel. The dispersal distance \(dist_{disp}\) is drawn from an Inverse Gaussian distribution parameterized according to the species-specific dispersal vector (an example is described in the Dispersal kernels. The new location is calculated as \begin{equation) (x_{new}, y_{new}) = (x+cos((dist_{disp},y+sin()_{disp}) \end{equation} where \((x,y)\) is the individual's current location (cartesian coordinates of the cell in the landscape). A species might have different dispersal kernels. Upon dispersal, one of them is randomly drawn from an Uniform probability distribution before drawing \(dist_{disp}\).

2.3.3.10 Seed germination

If a seeds is dispersed and falls on an unavailable grid cell, it dies immediately and is discarded from the simulation. Otherwise, its germination rate, \(B_{germ}\), and probability, \(p_{germ}\) are calculated according to the metabolic theory of ecology Details of the parameterization of normalization constant parameterized as described in the [Germination rate section]#germination-rate) of Data evaluation. The realization of germination is randomly drawn from a Bernoulli distribution, with probability \(p_{germ}\). If germination happens, the new seedling is identified as a juvenile individual. Seeds that do not germinate remain in the seed bank. Seeds that reach an age older than the species-specific seed bank duration are killed deterministically.

2.3.3.11 Disturbances

The model can simulate scenarios of temperature change, loss of habitat area (with or without fragmentation) and loss of pollination. These scenarios are defined independently from each other, which allows the combination of different perturbations into a single scenario. Each type of disturbance is simulated as follows:

2.3.3.11.1 Temperature change

The model is dependent on a temperature time series being input (to calculate the rates of biological processes), therefore, temperature change can be simulated by providing a time series that characterizes the temperature change for the duration of the simulation.

2.3.3.11.2 Area loss (without fragmentation)

The simulation scenario must define a proportion of habitat to be lost at a given time-step. Then, the number of contiguous grid cells equivalent to the area lost are marked as 'unsuitable' and all individuals occupying this cells are immediately killed. It is also possible to simulate area loss if a raster file describing a new configuration of habitat suitability of the original area is provided (associated with a time-step when it should be loaded).

2.3.3.11.3 Fragmentation

Habitat fragmentation can only be simulated via raster files. Similarly to area loss, cells are marked as unsuitable according to the description contained in the raster file and individuals in the area are killed. Several episodes of area loss or fragmentation can be simulated if several proportions or raster files describing loss are provided, associated with different time-steps. Individuals occupying cells that become "unsuitable" upon fragmentation are killed and discarded from the simulation.

We provide the createnlm.R script to generate raster files of a given area, using the NLMR package [@sciaininlmr2018] to . We describe its use in the Appendix.

2.3.3.11.4 Pollination loss

The regime of pollination loss is be defined according to its i) intensity, i.e., the proportion of flowers still being pollinated (\(p_{remain}\) = [0,1]), ii) frequency, i.e, the time-step(s) when loss happens (\(t_d\)), and iii) specificity, i.e., which species are affected. The intensity of loss affects pollinations by decreasing the number of individuals being identified as "pollinated", \(n_{poll}=n_{poll}\times{p}_{remain}\). The specificity of pollination loss can defined as "equal", "random", or "specific". In the scenario of "equal" pollination loss, all species are affected by \(p_{remain}\). Under the "random" scenario, \(p_{remain}\) is applied to the total individuals potentially reproducing, among all species. Thus, the number of pollinated individuals per species is randomly set. Under the "specific scenario", a given list of species loses pollination is affected by \(p_{remain}\). (see details in the Input section)

#5% the biomass allocated in reproductive compartment is used to produce seeds by plants that have been effectively pollinated (@weissgrazing2014).
#accounts for pollination efficiency (@Kingetal2013) reports 40% of visitors are not effective pollinators).

3 Data evaluation

Summary: The model uses species trait values to control entities behaviour in the simulation of a plant's life cycle under given biotic (pollination services) and abiotic (temperature and habitat availability) conditions. Because this model was developed to study the community dynamics of temperate grasslands, inspired by @krausshabitat2010, we report how we retrieved, evaluated and adapted species trait values and temperature time series data to parameterize the model to mimick this ecosystem. The parameter values thus defined are used as model input. Therefore, users of the model can refer to this section when defining their own experiments. Data was retrieved from different literature sources and databases. Data that could not be obtained as such was imputed, as described in "Missing trait values" subsections. The final trait values chosen for each species are listed in [Appendix 4][#edm-spptraits].

3.1 Management

Management is implemented following the regime reported for Göttingen by @kormannlocal2015. Thus, at most once a year, between August and September, the effects of management (mowing or grazing) are simulated as described in the Model description.

3.2 Temperature time series (Figure S@ref(fig:dwd-tempseries))

Parametrization of metabolic rates has taken into account the monthly mean temperatures registered for the city of Göttingen, between 1857 and 2017 (@dwdcdc2018, station 1691). Monthly temperatures values where expanded to a weekly bases by assigning the same value to all weeks of the month (code available in the chunck below). The final temperature time series is depicted in Fig. @ref(fig:dwd-tempseries).

# According to the `DESCRIPTION_obsgermany file, MO_TT contains the monthly mean of daily temperature mean at 2m height.
dwd_toexpand <- DWDdata %>%
  dplyr::select(MESS_DATUM_BEGINN, 
                MESS_DATUM_ENDE, 
                monthT)%>%
  mutate(begin_date = ymd(MESS_DATUM_BEGINN),
         end_date = ymd(MESS_DATUM_ENDE))%>%
  dplyr::select(-c(MESS_DATUM_BEGINN, MESS_DATUM_ENDE))%>%
  mutate(begin_week = week(begin_date),
         end_week = week(end_date))%>%
  dplyr::select(-c(end_date, end_week))%>%
  rename(week_inyear = begin_week)%>%
  mutate(week_year = paste(week(begin_date), year(begin_date), sep="-"))%>%
  as_tibble()

dwd_expanded = dwd_toexpand #extract week-year and use it to expand, to detect months with 4 or 5 weeks
for(i in 1:1932){
  for(j in 1:4){
    new_date = dwd_toexpand$begin_date[i] + weeks(j)
    new_weekyear = paste(week(new_date), year(new_date), sep="-")
    if(!(new_weekyear %in% dwd_toexpand$week_year)){
    dwd_expanded = add_row(dwd_expanded, 
                         monthT = dwd_toexpand$monthT[i],
                         begin_date = new_date,
                         week_inyear = week(dwd_toexpand$begin_date[i] + weeks(j)),
                         week_year = new_weekyear)}
  }
}
temperature_1857_2017 <- arrange(dwd_expanded, begin_date)%>%
  mutate(week = row_number())%>%
  dplyr::select(week, meantemp = monthT, begin_date, week_year, week_inyear)

write_csv(temperature_1857_2017,
          "temperature_series/temperaturegoettingen_18571917.csv")
ggplot(data = tempseries_goettingen, aes(x = begin_date, y = meantemp))+
  geom_point(aes(colour=meantemp), size = 1.25)+
  geom_line(aes(colour=meantemp))+
  labs(x = "Year", y = "Temperature(°C)")+
  theme_edm()+
  theme(legend.position = "none")
Temperature time-series used in the first implementation of the model. Monthly mean temperatures registered for the city of Göttingen, between 1857 and 2017 (@dwdcdc2018, station 1691) were expanded to a weekly bases by assigning the same value to all weeks of a given month.

Temperature time-series used in the first implementation of the model. Monthly mean temperatures registered for the city of Göttingen, between 1857 and 2017 (@dwdcdc2018, station 1691) were expanded to a weekly bases by assigning the same value to all weeks of a given month.

3.3 Species functional traits

Trait values used in the model Table @ref(tab:statevars) were retrieved from the LEDA Traitbase (@kleyerleda2008), the BiolFlor database [@klotzbiolflor2002], the FloraWeb database (http://www.floraweb.de), the WorldClim [@wordclim, @hijmansworldclim2005], and the GBIF database [@gbif2019]. The process of filtering and transformation of this data, as well as the parameterization based on it is described below.

3.3.1 Dispersal kernels (Table S@ref(tab:kernels))

Species dispersal types were retrieved from the LEDA database [@kleyerleda2008]. We used a classification of dispersal modes with similar distances [@vittozseed2007] to assign kernel parameters to the species. We reorganized the seven dispersal types originally devised by @vittozseed2007 into three super-types: short-, medium-, and long-distance dispersal @ref(tab:disp-groups). Kernels are assigned to a species according to the super-types its mode of dispersal belongs to.

disp_groups.df %>%
    mutate(Details = replace_na(Details, "-")) %>%
    knitr::kable(caption = "Reference values of dispersal distances (m) reported in @Vittoz&Engler2007_dispersal are used to verify the values generated by the kernels in the [Dispersal kernels](#dispersal-kernels) section of [Implementation](#implementation)",
               longtable = TRUE, booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    pack_rows(index = c("Short-distance dispersal kernel (0.1-100 m)" = 12,
                        "Medium-distance dispersal kernel (100-500 m)" = 1,
                        "Long-distance dispersal kernel (1-10 km)" = 8,
                        "Special cases: Dispersal through any of the kernels" = 4))
Reference values of dispersal distances (m) reported in @Vittoz&amp;Engler2007_dispersal are used to verify the values generated by the kernels in the Dispersal kernels section of Implementation
Dispersal mode Quantiles (50-99% m) Details
Short-distance dispersal kernel (0.1-100 m)
Autochory 0.1-1
Blastochory 0.1-1
Herpochory NA not included in Vittoz & Engler (2007) but assigned the same as other autochory syndromes
Ballochory 1-5
Boleochory 0.1-1
Ombrochory 0.1-1
Cystometeorochory 1-5
Trichometeorochory 2-15
Meteorochory NA
Pterometeorochory 2-15
Chamaeochory 1-5
Myrmechory 2-15
Medium-distance dispersal kernel (100-500 m)
Dyszoochory 40-150
Long-distance dispersal kernel (1-10 km)
Agochory 500-5000
Anthropochory 500-5000
Endozoochory 400-1500
Epizoochory 400-1500
Ethelochory 500-5000 assigned the same as anthropochory
Hemerochory NA
Speirochory 500-5000 assigned the same as anthropochory
Zoochory 400-1500
Special cases: Dispersal through any of the kernels
Anemochory NA
Nautochory NA
Bythisochory NA
other NA

When more than one dispersal kernel suits the same species, all of them are listed. If no dispersal mode was reported on neither of the references, the species can spread via any of the kernels. Because of the difficult in estimating the dispersal distances reached by nautochoric and bythisochoric species, those dispersal modes were ignored for species that had other dispersal modes. Species that only dispersed via these two modes were assigned as being able to disperse via any of the dispersal kernels.

## combine information source on dispersal: LEDA and classification of Vittoz & Engler (2007)
dispersal_edm <- spp_list %>%
  left_join(., dispersal_leda) %>% # column type
  dplyr::select(sp, mode_leda) %>% 
  left_join(., dispersal_ve) %>% # columns max_dist, disp_mode_ve, genus_max, genus_mode
  distinct() %>%
  ## Reclassify dispersal modes into dispersal kernels, according to Vittoz & Engler (2007).
  dplyr::select(sp, mode_leda, disp_mode_ve, genus_mode_ve) %>%
  ## If the dispersal mode for a species is missing in the LEDA traitbase, it get the mode reported in @vittozseed2007. If missing in both,  the species getsthe dispersal mode reported for the same genus in @vittozseed2007 (`dispersal_kernels` table).
  mutate(mode_leda = case_when(
    (is.na(mode_leda) | mode_leda == "") ~ ifelse(is.na(disp_mode_ve), genus_mode_ve, disp_mode_ve),
    TRUE ~ as.character(mode_leda))) %>%
  dplyr::select(-genus_mode_ve) %>%
  ## bythiosochory and nautochory: if it's a duplicate, delete; otherwise, mark as NA
  filter(., !(mode_leda %in% c("nautochor", "bythiosochor") & duplicated(sp))) %>%
  mutate(mode_leda = case_when(
    !(mode_leda %in% c("nautochor", "bythisochor")) ~ as.character(mode_leda))) %>%
  mutate(mode_leda = case_when(
    !(mode_leda %in% c("nautochor", "bythisochor")) ~ as.character(mode_leda))) %>%
  ## assign values reported in Vittoz & Engler (2007) to LEDA NAs and vice-versa
  mutate(mode_leda = case_when(
    is.na(mode_leda) & !is.na(disp_mode_ve) ~ disp_mode_ve,
    TRUE ~ mode_leda)) %>%
  mutate(disp_mode_ve = case_when(
    !is.na(mode_leda) & is.na(disp_mode_ve) ~ mode_leda,
    TRUE ~ disp_mode_ve)) %>%
  ## identify short-, medium-, and long-distance kernels reported in LEDA database
  mutate(
    mode_leda = case_when(
      mode_leda %in% c("autochor", "blastochor", "herpochor", "ballochor", "blastochor", "boleochor", "ombrochor", "cystometeorochor", "trichometeorochor", "meteorochor", "pterometeorochor", "myrmechor", "chamaechor") ~ "short",
      mode_leda %in% c("dysochor") ~ "medium",
      mode_leda %in% c("agochor",  "anthropochor", "epizoochor",  "endozoochor", "ethelochor", "hemerochor", "speirochor",  "zoochor") ~ "long",
      mode_leda %in% c("anemochor", "other") ~ "any",
    TRUE ~ mode_leda)) %>%
  ## identify short-, medium-, and long-distance kernels reported in Vittoz & Engler (2007)
  mutate(
    disp_mode_ve = case_when(
      disp_mode_ve %in% c("autochor", "blastochor", "herpochor", "ballochor", "boleochor", "ombrochor", "cystometeorochor", "trichometeorochor", "meteorochor", "pterometeorochor", "myrmechor", "chamaechor") ~ "short",
      disp_mode_ve %in% c("dysochor") ~ "medium",
      disp_mode_ve %in% c("agochor", "anthropochor", "endozoochor", "epizoochor", "ethelochor", "hemerochor", "speirochor", "zoochor") ~ "long",
      disp_mode_ve %in% c("anemochor", "other") ~ "any",
    TRUE ~ disp_mode_ve)) %>%
  ## merge LEDA and Vittoz & Engler (2007) reports
  mutate(kernel = case_when(
    mode_leda == "any" | disp_mode_ve == "any" ~ "any",
    is.na(mode_leda) & is.na(disp_mode_ve) ~ "any",
    mode_leda == disp_mode_ve ~ mode_leda,
    mode_leda != disp_mode_ve ~ paste(mode_leda, disp_mode_ve, sep = "-"))) %>%
  distinct() %>%
  ## Merge multiple dispersal types reported for the same species
  dplyr::select(sp, kernel) %>%
  group_by(sp) %>%
  mutate(kernel = paste0(kernel, collapse = "-")) %>%
  mutate(kernel = case_when(
    ## identify species for which any kernel can be used
    (str_detect(kernel, "any") | all(str_detect(kernel, c("long", "short", "medium")))) ~ "any",
    ## remove repeated occurences
    str_count(kernel, "short") > 1 ~ str_remove(kernel, "short-"),
    str_count(kernel, "medium") > 1 ~ str_remove(kernel, "medium-"),
    str_count(kernel, "long") > 1 ~ str_remove(kernel, "long-"),
    TRUE ~ as.character(kernel))) %>%
  distinct()

Each super-type is modeled by a set of kernel parameters Table @ref(tab:kernels).

kernels.df %>%
    knitr::kable(caption = "Dispersal kernels simulated in the model and the range of dispersal distances generated by each.",
               longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) #%>%
Dispersal kernels simulated in the model and the range of dispersal distances generated by each.
Dispersal kernel Function (parameters) Range of values
Short-distance Inverse Gaussian \((\mu = 1, \lambda = 0.2) \times 4\) \(0.1-100 m\)
Medium-distance Inverse Gaussian \((\mu = 0.2, \lambda = 3) \times 1000\) \(100-500 m\)
Long-distance Inverse Gaussian \((\mu = 1000, \lambda = 100\)) \(1-10 km\)
    ## kable_styling(full_width = FALSE) %>%
    ## column_spec(1, width = "4cm") %>%
    ## column_spec(2, width = "10cm") %>%
    ## column_spec(3, width = "4cm")

3.3.2 Seed mass

Seed mass values were retrieved from the LEDA database [@kleyerleda2008] and from a classification of plant sizes by @weissgrazing2014.

## filter values from Goettigen species
seedmass_goet <- seedmass_leda%>%
  dplyr::select(sp, diaspore, single_value, mean_sm)%>%
  mutate(mean_sm = mean_sm/1000)%>% #convert to milligrams
  mutate(single_value = single_value/1000)%>% #convert to milligrams
  group_by(sp,diaspore)%>%
  left_join(spp_list,.)%>%
  distinct()

In the LEDA database, mean_sm refers to the mean diaspore(*) mass value calculated from multiple observations, and single_value, to the measure of a single observation [@kleyerleda2008].

For some species, however, "single value" and "mean" values are not the same or one of them is missing. When available, both values are rather close ("Discrepancies are small", in Table @ref(tab:seedmass-values)). Nonetheless, mean_sm values are preferred, as they arise from multiple observations. If mean_sm is missing, single_value is used.

seedmass_goet %>%
    mk_itspp() %>%
    filter(single_value != mean_sm | is.na(single_value) | is.na(mean_sm))  %>%
    mutate(value_group = case_when(
               is.na(single_value) & is.na(mean_sm) ~ "Mean and single value are missing",
               !(is.na(single_value)) & is.na(mean_sm) ~ "Only mean value is missing",
               (is.na(single_value)) & !(is.na(mean_sm)) ~ "Only single value is missing",
               TRUE ~ "Discrepancies are small")) %>%
    dplyr::select(Species = species, Availability = value_group) %>%
    arrange(Availability) %>%
    knitr::kable(caption = "Identification of missing values for species affected by it.",
                 longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    collapse_rows(columns = 2, valign = "top") %>%
    footnote(general = "Daucus carota and Rumex acetosa have multiple non-matching entries in LEDA, but mean value is available and will thus will be used.")
Identification of missing values for species affected by it.
Species Availability
Aegopodium podagraria Discrepancies are small
Chaerophyllum temulum
Cichorium intybus
Daucus carota
Geranium molle
Geranium robertianum
Holcus lanatus
Rhinanthus angustifolius
Rumex acetosa
Rumex acetosa
Tanacetum vulgare
Trifolium dubium
Carex leporina Mean and single value are missing
Carlina vulgaris
Cephalanthera rubra
Cerastium holosteoides
Cerinthe minor
Elytrigia repens
Equisetum arvense
Hieracium lachenalii
Inula conyzae
Listera ovata
Medicago falcata
Mentha verticillata
Ophrys apifera
Ophrys insectifera
Orchis mascula
Orchis purpurea
Orchis tridentata
Potentilla neumanniana
Senecio ovatus
Taraxacum laevigatum
Veronica teucrium
Vicia villosa
Allium schoenoprasum Only mean value is missing
Daucus carota
Rumex acetosa
Triticum aestivum
Note:
Daucus carota and Rumex acetosa have multiple non-matching entries in LEDA, but mean value is available and will thus will be used.

Note that the reported values (of mean_sm and single_value) vary according to the diaspore, dispersule or geminule, used to measure it:

"Dispersule: Every morphological part of a plant that serves as a unit of dispersal and becomes detached from the mother-plant to disperse. Here we only provide data for the generative dispersules, i.e. units of dispersal that contain a seeds (see also germinule)."

"Germinule: Unit of germination. In many cases the dispersule is not the unit that will enter the soil after dispersal and germinate and therefore differs from the dispersule. This difference is due to morphological structures, such as pappus, wings, awns or fleshy nutrient containing tissues, that get lost between the time of dispersal and the time of germination."

--- Definitions used in the LEDA traitbase [@kleyerleda2008].

Discrepant measures could be cleared identified for the one instance of "multi-seeded generative" diaspore, which was thus discarded. Values reported for "unknown" diaspore were not used either, as it is not possible to evaluate for which reproductive unit they were measured. The other variances were checked via their coefficient of variation. Values of germinule weight have precedence, as these are the reproductive structures that enter the soil and germinate. Species for which germinule value was missing were assigned the value reported for one-seeded dispersule. If that was also missing, the value reported for generative dispersule was used.

seedmass_germinule <- seedmass_goet %>%
  filter(diaspore == "germinule")%>%
  mutate(mean_sm = case_when(
    is.na(mean_sm) ~ single_value,
    TRUE ~ mean_sm))%>%
  dplyr::select(-single_value)%>%
  distinct()%>%
  group_by(sp,diaspore)%>%
  summarize(seedmass_mean = mean(mean_sm),
            seedmass_sd = sd(mean_sm),
            seedmass_cv = 100*seedmass_sd/seedmass_mean)

seedmass_germinule %>%
    mk_itspp() %>%
    dplyr::select(-diaspore) %>%
    rename("Species" = species,
           "Mean value (mg)" = seedmass_mean,
           "Std. Deviation (mg)" = seedmass_sd,
           "Coeff. variation (%)" = seedmass_cv) %>%
    kable(caption = "Intraspecific variation of germinule mass values reported in the LEDA database.",
          longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    scroll_box(width = "100%", height = "400px")
Intraspecific variation of germinule mass values reported in the LEDA database.
Species Mean value (mg) Std. Deviation (mg) Coeff. variation (%)
Achillea millefolium 0.0001305 0.0000423 32.402769
Acinos arvensis 0.0006155 0.0006515 105.842074
Actaea spicata 0.0062603 0.0006095 9.736148
Aegopodium podagraria 0.0015825 0.0004878 30.824561
Agrimonia eupatoria 0.0130967 0.0104114 79.496415
Ajuga genevensis 0.0017540 NA NA
Ajuga reptans 0.0014652 0.0000206 1.408543
Allium schoenoprasum 0.0009167 0.0001735 18.925650
Alopecurus pratensis 0.0007005 0.0000742 10.599031
Anchusa arvensis 0.0045297 0.0015999 35.320013
Antennaria dioica 0.0000535 0.0000092 17.182034
Anthoxanthum odoratum 0.0005640 0.0002985 52.931100
Anthriscus sylvestris 0.0042036 0.0008762 20.844473
Anthyllis vulneraria 0.0032066 0.0005561 17.342779
Arabis hirsuta 0.0000926 0.0000336 36.256428
Arrhenatherum elatius 0.0025858 0.0005373 20.779781
Artemisia vulgaris 0.0001396 0.0000387 27.737779
Astragalus glycyphyllos 0.0051500 0.0004784 9.289591
Avenula pubescens 0.0019075 0.0000233 1.223304
Bellis perennis 0.0001415 0.0000809 57.199302
Brachypodium pinnatum 0.0020458 0.0012759 62.366970
Briza media 0.0003855 0.0001598 41.451004
Bromus erectus 0.0046908 0.0003932 8.382814
Bromus hordeaceus 0.0017159 0.0018782 109.459352
Calystegia sepium 0.0302720 0.0042330 13.983189
Campanula glomerata 0.0001430 0.0000268 18.720721
Campanula persicifolia 0.0000706 0.0000079 11.217558
Campanula rapunculoides 0.0001920 0.0001645 85.695211
Campanula rotundifolia 0.0000631 0.0000117 18.565796
Cardaminopsis arenosa 0.0001090 NA NA
Carduus crispus 0.0016901 0.0005185 30.678209
Carex caryophyllea 0.0012118 0.0003657 30.177066
Carex flacca 0.0009653 0.0001954 20.245877
Carex ornithopoda 0.0007596 0.0001126 14.819826
Centaurea jacea 0.0020156 0.0009595 47.603449
Centaurea scabiosa 0.0061623 0.0011812 19.168865
Centaurium erythraea 0.0000126 0.0000043 33.937470
Cerastium arvense 0.0002260 NA NA
Cerastium tomentosum 0.0004492 0.0001000 22.267996
Chaerophyllum hirsutum 0.0033330 NA NA
Chaerophyllum temulum 0.0028661 0.0004814 16.794404
Cichorium intybus 0.0019306 0.0003673 19.028123
Cirsium acaule 0.0033513 0.0007729 23.063137
Cirsium arvense 0.0011891 0.0001025 8.621032
Cirsium oleraceum 0.0025923 0.0000881 3.399079
Cirsium vulgare 0.0024458 0.0004116 16.827812
Clinopodium vulgare 0.0004245 0.0000575 13.539201
Convolvulus arvensis 0.0114391 0.0125680 109.868796
Crepis biennis 0.0011153 0.0001645 14.746977
Cruciata laevipes 0.0035856 NA NA
Cynosurus cristatus 0.0005514 0.0001141 20.697872
Dactylis glomerata 0.0009057 0.0002729 30.131669
Daucus carota 0.0011330 0.0003149 27.791489
Echium vulgare 0.0028145 0.0002831 10.058813
Epilobium angustifolium 0.0000564 NA NA
Epilobium montanum 0.0001204 NA NA
Euphorbia cyparissias 0.0019580 0.0007750 39.580645
Euphrasia officinalis 0.0001310 0.0000014 1.079552
Falcaria vulgaris 0.0009300 NA NA
Festuca ovina 0.0003565 0.0002150 60.300009
Festuca pratensis 0.0018080 0.0003932 21.745098
Festuca rubra 0.0008650 0.0003040 35.138880
Filipendula vulgaris 0.0007030 0.0001601 22.778171
Fragaria vesca 0.0003208 0.0000266 8.292306
Fragaria viridis 0.0003751 0.0001398 37.275672
Galeopsis ladanum 0.0012000 NA NA
Galium aparine 0.0092078 0.0025501 27.694628
Galium mollugo 0.0007562 0.0001813 23.980360
Galium verum 0.0005547 0.0001168 21.053955
Genista tinctoria 0.0037611 0.0005859 15.576876
Gentianella ciliata 0.0001270 NA NA
Gentianella germanica 0.0001544 0.0000288 18.685205
Geranium dissectum 0.0025653 0.0000888 3.462393
Geranium molle 0.0010464 0.0000799 7.636833
Geranium pratense 0.0083606 0.0018614 22.263458
Geranium pusillum 0.0007572 0.0001216 16.065116
Geranium robertianum 0.0014076 0.0002583 18.349480
Geum urbanum 0.0015905 0.0012141 76.334633
Gymnadenia conopsea 0.0000060 NA NA
Helianthemum nummularium 0.0010792 0.0003380 31.317262
Heracleum sphondylium 0.0059122 0.0006622 11.200961
Hieracium murorum 0.0004000 NA NA
Hieracium pilosella 0.0001724 0.0000573 33.226069
Hippocrepis comosa 0.0036646 0.0005812 15.858910
Holcus lanatus 0.0003542 0.0001032 29.145509
Hypericum perforatum 0.0000995 0.0000354 35.527311
Knautia arvensis 0.0044278 0.0017531 39.592036
Koeleria pyramidata 0.0023000 NA NA
Lathyrus pratensis 0.0126003 0.0022036 17.488367
Leontodon hispidus 0.0011093 0.0002842 25.620397
Leucanthemum vulgare 0.0004056 0.0000496 12.227313
Linum catharticum 0.0001529 0.0000158 10.303890
Lolium perenne 0.0019982 0.0002313 11.574323
Lotus corniculatus 0.0013993 0.0002433 17.387347
Medicago lupulina 0.0017413 0.0002380 13.668272
Melilotus alba 0.0028295 0.0012594 44.508117
Melilotus officinalis 0.0025756 0.0014815 57.519192
Mentha arvensis 0.0001837 0.0000666 36.239406
Myosotis arvensis 0.0003060 0.0000224 7.320261
Myosotis sylvatica 0.0004670 0.0001315 28.163139
Onobrychis viciifolia 0.0201170 0.0023906 11.883511
Ononis repens 0.0051355 0.0004122 8.027325
Ononis spinosa 0.0047589 0.0015598 32.776793
Orchis militaris 0.0000010 NA NA
Origanum vulgare 0.0000944 0.0000147 15.526569
Phalaris arundinacea 0.0007175 0.0000629 8.770896
Pimpinella saxifraga 0.0012331 0.0002822 22.889261
Plantago lanceolata 0.0017259 0.0004097 23.740868
Plantago major 0.0002950 0.0000636 21.572749
Plantago media 0.0003732 0.0000919 24.608892
Platanthera chlorantha 0.0000030 NA NA
Poa annua 0.0002127 0.0000610 28.702477
Poa pratensis 0.0002687 0.0000318 11.830921
Polygala vulgaris 0.0017736 0.0001246 7.026344
Potentilla anserina 0.0010118 0.0001875 18.533773
Potentilla reptans 0.0002679 0.0000220 8.228751
Primula veris 0.0008156 0.0001858 22.783230
Prunella grandiflora 0.0007780 NA NA
Prunella vulgaris 0.0006776 0.0000659 9.719330
Ranunculus bulbosus 0.0026607 0.0011067 41.596272
Ranunculus repens 0.0022736 0.0007780 34.218060
Rhinanthus angustifolius 0.0023213 0.0002768 11.923573
Rhinanthus minor 0.0027015 0.0004292 15.886784
Rumex acetosa 0.0008381 0.0002866 34.200062
Rumex crispus 0.0018993 0.0008908 46.898441
Salvia pratensis 0.0026018 0.0005634 21.653102
Sanguisorba minor 0.0043664 0.0015513 35.528058
Scabiosa columbaria 0.0017925 0.0005773 32.209043
Sedum sexangulare 0.0000100 NA NA
Senecio erucifolius 0.0003100 NA NA
Senecio jacobaea 0.0003171 0.0001260 39.747534
Senecio vulgaris 0.0002690 0.0000198 7.360219
Silene dioica 0.0007876 0.0001729 21.955568
Silene nutans 0.0003454 0.0001316 38.109924
Sonchus asper 0.0002943 0.0000257 8.730561
Stachys germanica 0.0015188 0.0002237 14.729191
Stellaria holostea 0.0027284 0.0004172 15.292532
Stellaria media 0.0003936 0.0000686 17.427629
Symphytum officinale 0.0111288 NA NA
Tanacetum vulgare 0.0003431 0.0001686 49.131722
Thymus pulegioides 0.0001519 0.0000300 19.724965
Tragopogon pratensis 0.0084214 0.0013562 16.103975
Trifolium campestre 0.0003186 0.0000699 21.952155
Trifolium dubium 0.0004029 0.0000441 10.939470
Trifolium medium 0.0021266 0.0004149 19.511439
Trifolium ochroleucon 0.0023984 0.0010093 42.082031
Trifolium pratense 0.0013825 0.0002395 17.326319
Trifolium repens 0.0005134 0.0001535 29.904679
Trisetum flavescens 0.0002230 0.0000753 33.787385
Triticum aestivum 0.0431250 0.0008839 2.049585
Valeriana dioica 0.0008636 0.0006056 70.126026
Valeriana officinalis 0.0008710 0.0002221 25.494409
Verbascum lychnitis 0.0001188 0.0000181 15.237318
Veronica chamaedrys 0.0001960 0.0000177 9.026432
Vicia cracca 0.0158318 0.0044573 28.154330
Vicia hirsuta 0.0059904 0.0023536 39.290087
Vicia sepium 0.0227702 0.0023650 10.386586
Vicia tenuifolia 0.0242800 0.0053457 22.016999
Vicia tetrasperma 0.0031977 0.0004474 13.991228
Vincetoxicum hirundinaria 0.0069850 0.0003323 4.757912
Viola hirta 0.0028570 0.0007985 27.950250
Viola odorata 0.0033096 NA NA
ggplot(seedmass_germinule) +
    geom_histogram(aes(x = seedmass_cv)) +
    labs(x = "Coefficient of variation (%)")
## Warning: Removed 20 rows containing non-finite values (stat_bin).
Distribution of coefficient of intraspecific variation of measures of germinule mass reported in the LEDA database.

Distribution of coefficient of intraspecific variation of measures of germinule mass reported in the LEDA database.

seedmass_oneseeded <- seedmass_goet %>%
    # these values will be used for species missing the germinule measure: 4 spp
  filter(diaspore == "one-seeded_generative_dispersule" & 
           !(sp %in% seedmass_germinule$sp))%>%
  mutate(mean_sm = case_when(
    is.na(mean_sm) ~ single_value,
    TRUE ~ mean_sm))%>%
  dplyr::select(-single_value)%>%
  distinct()%>%
  group_by(sp,diaspore)%>%
  summarize(seedmass_mean = mean(mean_sm),
            seedmass_sd = sd(mean_sm),
            seedmass_cv = 100*seedmass_sd/seedmass_mean)

seedmass_oneseeded %>%
    mk_itspp() %>%
    dplyr::select(-diaspore) %>%
    rename("Species" = species,
           "Mean value (mg)" = seedmass_mean,
           "Std. Deviation (mg)" = seedmass_sd,
           "Coeff. variation (%)" = seedmass_cv) %>%
  kable(caption = "Intra-specific variation of mass values of one-seed generative dispersules reported in the LEDA database.",
               longtable = TRUE, booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Intra-specific variation of mass values of one-seed generative dispersules reported in the LEDA database.
Species Mean value (mg) Std. Deviation (mg) Coeff. variation (%)
Hieracium caespitosum 0.0001065 NA NA
Melampyrum sylvaticum 0.0075550 NA NA
Phleum pratense 0.0004460 NA NA
Poa trivialis 0.0001440 0.0000581 40.34955
seedmass_gendisp <- seedmass_goet %>%
  # these values will be used for species missing the germinule measure: 3 spp
  filter(diaspore == "generative_dispersule" & 
           !(sp %in% c(seedmass_germinule$sp, seedmass_oneseeded$sp)))%>%
  mutate(mean_sm = case_when(
    is.na(mean_sm) ~ single_value,
    TRUE ~ mean_sm))%>%
  dplyr::select(-single_value)%>%
  distinct()%>%
  group_by(sp,diaspore)%>%
  summarize(seedmass_mean = mean(mean_sm, na.rm = TRUE),
            seedmass_sd = sd(mean_sm, na.rm = TRUE),
            seedmass_cv = 100*seedmass_sd/seedmass_mean)

seedmass_gendisp %>%
    dplyr::select(-diaspore) %>%
    mk_itspp() %>%
    rename("Species" = species,
           "Mean value (mg)" = seedmass_mean,
           "Std. Deviation (mg)" = seedmass_sd,
           "Coeff. variation (%)" = seedmass_cv) %>%
    kable(caption = "Intra-specific variation of mass values of generative dispersules reported in the LEDA database.",
               longtable = TRUE, booktabs = TRUE)  %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Intra-specific variation of mass values of generative dispersules reported in the LEDA database.
Species Mean value (mg) Std. Deviation (mg) Coeff. variation (%)
Galium pumilum 0.0003580 NA NA
Melampyrum nemorosum 0.0066378 NA NA
Polygala comosa 0.0014200 NA NA

For species for which data is missing in the LEDA database, we used the values attributed in the @weissgrazing2014 classification of species sizes.

seedmass_weiss <- filter(weiss_goetmasses, !(sp %in% c(seedmass_germinule$sp,
                                                       seedmass_oneseeded$sp,
                                                       seedmass_gendisp$sp)))

seedmass_weiss %>%
    mk_itspp() %>%
    dplyr::select("Species" = species,
                  "Seed mass (mg)" = weiss_seedmass)%>%
    kable(caption = "Species for which seed mass could not be retrieved from the LEDA database",longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Species for which seed mass could not be retrieved from the LEDA database
Species Seed mass (mg)
Equisetum arvense 0.0001
Veronica teucrium 0.0003

The variation of reported values (Table @ref(tab:germinule-leda), Fig. @ref(fig:fig-germ-leda), and Table @ref(tab:oneseed-leda)) is passed down to the model by inputing minimal and maximal values, from which individual values are drawn, following an Uniform distribution.

# Combine all measures in a single table and reclassify LEDA values inside Weiss et al.
seedmass_edm <- full_join(seedmass_germinule, seedmass_oneseeded)%>%
  full_join(., seedmass_gendisp)%>%
  full_join(., seedmass_weiss)%>%
  mutate(seedmass_mean = case_when(
    is.na(seedmass_mean) ~ weiss_seedmass,
    TRUE ~ seedmass_mean))%>%
  mutate(seedmass_mean = case_when(
    seedmass_mean <= 0.0001 ~ 0.0001,
    seedmass_mean > 0.0001 & seedmass_mean <= 0.0003 ~ 0.0003,
    seedmass_mean > 0.0003 ~ 0.001))%>%
  dplyr::select(sp, seedmass = seedmass_mean)%>%
  full_join(., spp_list)

Seed mass sizes were used to parameterize metabolic rates of germination (see below in Implementation verification).

3.3.3 Adult maximal mass (Table @ref(tab:size-classes))

We combined the allometric relationship devised by @niklasenquistcanonical2002 with the classification divised by @weissgrazing2014 to assign species maximal (adult) weights.

Considering the biomass allometric relationship, \(M_{leaf} \U+221D M_{stem}^{3/4} \U+221D M_{root}^{3/4}\), the total maximal biomass of adult individuals is \(M_{total} = 2 \times M_{organ} + M_{organ}^{3/4}\). We used @weissgrazing2014 size group classification Table @ref(tab:size-classes) to assign organ maximal biomass (also referred to as biomass compartments) according to the species seed size. Forty-seven of the 194 species used to parameterize the model were used to devise this classification.

fullsize <- function(x){
  fullsize = 2*x + x^(3/4)
  return(fullsize)
}
maxmass_edm <- seedmass_edm%>%
  mutate(maxmass = case_when(
    seedmass <= 0.0001 ~ fullsize(10),
    seedmass > 0.0001 & seedmass <= 0.0003 ~ fullsize(20),
    seedmass > 0.0003 ~ fullsize(50)))%>%
    dplyr::select(sp, maxmass)
Minimal and maximal sizes defined for plant functional types in Weiss et al. (2013)
Group Seed mass (mg) Max. size (g)
small 0.0001 1
medium 0.0003 2
large 0.0010 5

3.3.4 Seed number

Seed numbers were retrieved from the LEDA database [@kleyerleda2008]. Similar to values of seed mass, measures from multiple (mean_value) and a single (single_value) observations, and for different types of inflorescence were reported.

Because both measures are rather close @ref(fig:match-seednumbers), and there are less species for which single_value is missing @ref(tab:nas-seednumbers), this value was used for all species.

## filter values for species from Göttingen
seednumber_goet <- seednumber_leda %>%
    left_join(spp_list,.)

seednumber_goet %>%
    mutate(ratio = mean_number/single_value) %>%
    ggplot(aes(x = ratio)) +
    geom_histogram(bin_width = 100)+
    labs(x = "Ratio mean_number/single value")
## Warning: Ignoring unknown parameters: bin_width
## Warning: Removed 353 rows containing non-finite values (stat_bin).
Comparison of values reported as the "mean" and "single" seed numbers in the LEDA trait database.

Comparison of values reported as the "mean" and "single" seed numbers in the LEDA trait database.

tbdf  <- seednumber_goet %>%
    dplyr::select(mean_number, single_value) %>%
    mutate_at(.vars = vars(mean_number, single_value), .funs = is.na)
do.call(cbind, lapply(tbdf, summary)) %>%
    kable(caption = "Summary of missing data on seed number of the species used to paramterize the model, in the LEDA database. \"TRUE\" and \"FALSE\" refer to the availability of data or not, respectively.",
          longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Summary of missing data on seed number of the species used to paramterize the model, in the LEDA database. "TRUE" and "FALSE" refer to the availability of data or not, respectively.
mean_number single_value
Mode logical logical
FALSE 583 872
TRUE 353 64

The value reported varies according to the reproductive unit it was measured on. The possible reproductive units are "multiple flower stem", "ramet/tussock or individual plant", "single flower inflorescence", "multiple flower inflorescence", "per square meter", or "unknown" (Table @ref(tab:seednumber-units)).

# Average multiple measures for the same reproductive unit
seed_number_unit <- seednumber_goet%>%
  group_by(sp,repro_unit)%>%
  summarize(seednumber_mean = mean(single_value),
            seednumber_sd = sd(single_value),
            seednumber_min = min(single_value),
            seednumber_max = max(single_value))%>%
    filter(repro_unit != "per_square_meter") #Filter out NAs and measures per area

seed_number_unit %>%
    mk_itspp() %>%
    mutate(repro_unit = str_replace_all(repro_unit, pattern = "_", replacement = " ")) %>%
    rename("Species" = "species",
           "Reproductive unit" = "repro_unit",
           "Seed number (\U1D707) " = "seednumber_mean",
           "Seed number (std. dev.)" = "seednumber_sd",
           "Seed number (min.)" = "seednumber_min",
           "Seed number (max.)" = "seednumber_max") %>%
    kable(caption = "Summary of seed number values reported in the LEDA database.",
          longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover",
                                        "condensed", "responsive")) %>%
    scroll_box(width = "100%", height = "400px")
Summary of seed number values reported in the LEDA database.
Species Reproductive unit Seed number (𝜇) Seed number (std. dev.) Seed number (min.) Seed number (max.)
Achillea millefolium per multiple flower stem 822.00000 NA 822.00 822.00
Achillea millefolium per ramet/tussock or individual plant 2473.01667 1923.911755 190.00 7200.00
Acinos arvensis per ramet/tussock or individual plant 342.00000 NA 342.00 342.00
Actaea spicata per ramet/tussock or individual plant 574.25000 884.159252 108.00 1900.00
Actaea spicata per single flower inflorescence 12.00000 NA 12.00 12.00
Aegopodium podagraria per multiple flower inflorescence 317.00000 68.687699 240.00 402.00
Aegopodium podagraria per multiple flower stem 199.90000 29.357755 164.00 253.00
Aegopodium podagraria per ramet/tussock or individual plant 2075.16250 3589.605562 46.50 10700.00
Agrimonia eupatoria per multiple flower stem 50.00000 NA 50.00 50.00
Agrimonia eupatoria per ramet/tussock or individual plant 66.00000 NA 66.00 66.00
Agrimonia eupatoria per single flower inflorescence 2.00000 NA 2.00 2.00
Ajuga genevensis per multiple flower stem 221.00000 NA 221.00 221.00
Ajuga reptans per multiple flower inflorescence 21.00000 NA 21.00 21.00
Ajuga reptans per ramet/tussock or individual plant 56.75000 32.592177 36.00 105.00
Allium schoenoprasum per multiple flower stem 162.00000 NA 162.00 162.00
Allium schoenoprasum per ramet/tussock or individual plant 4149.00000 NA 4149.00 4149.00
Alopecurus pratensis per ramet/tussock or individual plant 414.00000 NA 414.00 414.00
Anchusa arvensis per ramet/tussock or individual plant 557.00000 286.000000 128.00 700.00
Anchusa arvensis per single flower inflorescence 4.00000 NA 4.00 4.00
Antennaria dioica per ramet/tussock or individual plant 280.00000 NA 280.00 280.00
Anthoxanthum odoratum per multiple flower inflorescence 14.55455 2.678195 9.00 19.60
Anthoxanthum odoratum per ramet/tussock or individual plant 401.87500 432.510958 108.00 1038.50
Anthriscus sylvestris per multiple flower inflorescence 229.50000 113.844192 149.00 310.00
Anthriscus sylvestris per multiple flower stem 2457.00000 NA 2457.00 2457.00
Anthriscus sylvestris per ramet/tussock or individual plant 3053.56875 3723.619305 132.10 10000.00
Anthriscus sylvestris unknown 5400.00000 NA 5400.00 5400.00
Anthyllis vulneraria per multiple flower inflorescence 16.60000 NA 16.60 16.60
Anthyllis vulneraria per ramet/tussock or individual plant 112.00000 115.965512 30.00 194.00
Arabis hirsuta per ramet/tussock or individual plant 750.00000 NA 750.00 750.00
Arrhenatherum elatius per ramet/tussock or individual plant 10.00000 NA 10.00 10.00
Artemisia vulgaris per multiple flower inflorescence 200000.00000 NA 200000.00 200000.00
Artemisia vulgaris per ramet/tussock or individual plant 358333.33333 150692.844333 200000.00 500000.00
Astragalus glycyphyllos per ramet/tussock or individual plant 10315.00000 NA 10315.00 10315.00
Avenula pubescens per multiple flower inflorescence 47.90000 7.465923 43.50 59.00
Avenula pubescens per ramet/tussock or individual plant 4000.00000 0.000000 4000.00 4000.00
Bellis perennis per multiple flower inflorescence 200.00000 NA 200.00 200.00
Bellis perennis per multiple flower stem 125.00000 NA 125.00 125.00
Bellis perennis per ramet/tussock or individual plant 1288.00000 NA 1288.00 1288.00
Brachypodium pinnatum per multiple flower stem 87.00000 NA 87.00 87.00
Briza media per ramet/tussock or individual plant 3743.50000 5040.964243 179.00 7308.00
Falcaria vulgaris per ramet/tussock or individual plant 2000.00000 NA 2000.00 2000.00
Festuca ovina per multiple flower inflorescence 38.20000 23.401816 1.00 75.00
Festuca ovina per multiple flower stem 62.00000 NA 62.00 62.00
Festuca ovina per ramet/tussock or individual plant 847.00000 NA 847.00 847.00
Festuca rubra per multiple flower inflorescence 7.20000 NA 7.20 7.20
Festuca rubra per ramet/tussock or individual plant 465.00000 NA 465.00 465.00
Filipendula vulgaris per ramet/tussock or individual plant 324.43333 183.335112 113.00 439.30
Fragaria vesca per multiple flower stem 174.43333 64.882227 115.40 243.90
Fragaria vesca per ramet/tussock or individual plant 290.50000 53.294778 225.00 341.00
Galeopsis ladanum per ramet/tussock or individual plant 300.00000 NA 300.00 300.00
Galium aparine per ramet/tussock or individual plant 441.63636 307.131982 31.00 1000.00
Galium aparine per single flower inflorescence 2.00000 NA 2.00 2.00
Galium mollugo per ramet/tussock or individual plant 10867.00000 12916.012465 1734.00 20000.00
Galium verum per multiple flower inflorescence 550.00000 NA 550.00 550.00
Galium verum per ramet/tussock or individual plant 58.35000 64.700271 12.60 104.10
Galium verum per single flower inflorescence 2.00000 NA 2.00 2.00
Gentianella ciliata per single flower inflorescence 670.00000 NA 670.00 670.00
Gentianella germanica per ramet/tussock or individual plant 347.00000 187.945027 160.00 594.00
Gentianella germanica per single flower inflorescence 99.00000 NA 99.00 99.00
Geranium dissectum per ramet/tussock or individual plant 336.25000 443.196251 95.00 1000.00
Geranium dissectum per single flower inflorescence 5.00000 NA 5.00 5.00
Geranium molle per multiple flower inflorescence 16.00000 NA 16.00 16.00
Geranium molle per ramet/tussock or individual plant 90.50000 13.435029 81.00 100.00
Geranium molle per single flower inflorescence 4.00000 1.414214 3.00 5.00
Geranium pratense per single flower inflorescence 3.00000 NA 3.00 3.00
Geranium pusillum per ramet/tussock or individual plant 525.00000 318.198052 300.00 750.00
Geranium robertianum per ramet/tussock or individual plant 132.72500 119.263165 30.00 300.00
Geranium robertianum per single flower inflorescence 5.00000 NA 5.00 5.00
Geum urbanum per multiple flower stem 558.00000 NA 558.00 558.00
Geum urbanum per ramet/tussock or individual plant 248.25000 107.833784 172.00 324.50
Gymnadenia conopsea per ramet/tussock or individual plant 31699.00000 NA 31699.00 31699.00
Gymnadenia conopsea per single flower inflorescence 2480.00000 2093.036072 1000.00 3960.00
Helianthemum nummularium per ramet/tussock or individual plant 243.00000 NA 243.00 243.00
Helianthemum nummularium per single flower inflorescence 17.50000 3.535534 15.00 20.00
Heracleum sphondylium per ramet/tussock or individual plant 5216.00000 3508.378187 850.00 10005.00
Heracleum sphondylium per single flower inflorescence 2.00000 NA 2.00 2.00
Hieracium caespitosum per ramet/tussock or individual plant 612.00000 NA 612.00 612.00
Hieracium pilosella per multiple flower inflorescence 71.75000 22.980970 55.50 88.00
Hieracium pilosella per ramet/tussock or individual plant 48.26667 21.827933 21.00 75.00
Hippocrepis comosa per ramet/tussock or individual plant 120.00000 NA 120.00 120.00
Hippocrepis comosa per single flower inflorescence 6.00000 NA 6.00 6.00
Holcus lanatus per multiple flower inflorescence 112.20000 NA 112.20 112.20
Holcus lanatus per ramet/tussock or individual plant 177000.00000 NA 177000.00 177000.00
Hypericum perforatum per ramet/tussock or individual plant 20933.60000 12189.762869 3036.00 33000.00
Hypericum perforatum per single flower inflorescence 211.33333 210.571445 56.00 451.00
Knautia arvensis per multiple flower inflorescence 58.70000 NA 58.70 58.70
Knautia arvensis per ramet/tussock or individual plant 826.84000 914.915441 66.00 2000.00
Koeleria pyramidata per multiple flower stem 209.50000 NA 209.50 209.50
Lathyrus pratensis per multiple flower inflorescence 12.26667 5.515675 4.80 18.80
Lathyrus pratensis per ramet/tussock or individual plant 124.00000 120.144358 38.00 300.00
Lathyrus pratensis per single flower inflorescence 6.00000 NA 6.00 6.00
Leontodon hispidus per multiple flower inflorescence 67.70000 NA 67.70 67.70
Leontodon hispidus per ramet/tussock or individual plant 68.50000 3.535534 66.00 71.00
Leucanthemum vulgare per multiple flower inflorescence 185.00000 148.492424 80.00 290.00
Leucanthemum vulgare per ramet/tussock or individual plant 3573.79000 7961.859141 66.10 26000.00
Linum catharticum per ramet/tussock or individual plant 81.35455 58.904607 11.40 183.00
Linum catharticum per single flower inflorescence 10.00000 NA 10.00 10.00
Listera ovata per ramet/tussock or individual plant 85500.00000 91216.774773 21000.00 150000.00
Lotus corniculatus per ramet/tussock or individual plant 6328.66667 10108.754638 345.00 18000.00
Medicago lupulina per multiple flower inflorescence 15.70000 NA 15.70 15.70
Medicago lupulina per ramet/tussock or individual plant 2103.12500 2053.357768 100.00 6600.00
Medicago lupulina per single flower inflorescence 1.00000 NA 1.00 1.00
Melampyrum arvense per ramet/tussock or individual plant 24.66667 15.011107 10.00 40.00
Melampyrum arvense per single flower inflorescence 4.00000 NA 4.00 4.00
Melampyrum nemorosum per ramet/tussock or individual plant 225.00000 301.227489 12.00 438.00
Melampyrum sylvaticum per ramet/tussock or individual plant 23.77143 23.507922 9.40 76.00
Melilotus alba per ramet/tussock or individual plant 160880.62500 177778.622524 4287.50 350000.00
Melilotus alba per single flower inflorescence 2.00000 NA 2.00 2.00
Melilotus officinalis per ramet/tussock or individual plant 50050.00000 70639.967440 100.00 100000.00
Melilotus officinalis per single flower inflorescence 2.00000 1.414214 1.00 3.00
Mentha arvensis per ramet/tussock or individual plant 129.87500 87.388381 19.50 200.00
Myosotis arvensis per ramet/tussock or individual plant 900.00000 391.578004 500.00 1400.00
Myosotis arvensis per single flower inflorescence 4.00000 NA 4.00 4.00
Myosotis sylvatica per ramet/tussock or individual plant 192.00000 NA 192.00 192.00
Onobrychis viciifolia per multiple flower inflorescence 16.00000 NA 16.00 16.00
Onobrychis viciifolia per single flower inflorescence 1.00000 NA 1.00 1.00
Ononis repens per single flower inflorescence 2.50000 2.121320 1.00 4.00
Ononis spinosa per ramet/tussock or individual plant 300.00000 NA 300.00 300.00
Ononis spinosa per single flower inflorescence 4.00000 NA 4.00 4.00
Ophrys apifera per ramet/tussock or individual plant 40000.00000 NA 40000.00 40000.00
Ophrys apifera per single flower inflorescence 1000.00000 NA 1000.00 1000.00
Orchis purpurea per single flower inflorescence 6000.00000 NA 6000.00 6000.00
Origanum vulgare per single flower inflorescence 4.00000 NA 4.00 4.00
Phalaris arundinacea per ramet/tussock or individual plant 3000.00000 NA 3000.00 3000.00
Phleum pratense per multiple flower inflorescence 677.00000 NA 677.00 677.00
Pimpinella saxifraga per multiple flower inflorescence 122.50000 NA 122.50 122.50
Pimpinella saxifraga per ramet/tussock or individual plant 2264.75000 3633.802173 268.00 9566.00
Pimpinella saxifraga per single flower inflorescence 2.00000 NA 2.00 2.00
Plantago lanceolata per multiple flower inflorescence 28.05000 4.112988 24.00 33.60
Plantago lanceolata per ramet/tussock or individual plant 2714.16667 3586.977023 585.00 10000.00
Plantago lanceolata per single flower inflorescence 2.00000 NA 2.00 2.00
Plantago lanceolata unknown 93.50000 47.376154 60.00 127.00
Plantago major per multiple flower inflorescence 2030.00000 NA 2030.00 2030.00
Plantago major per ramet/tussock or individual plant 13835.37500 13268.546792 565.00 40000.00
Plantago major per single flower inflorescence 19.00000 12.727922 10.00 28.00
Plantago media per ramet/tussock or individual plant 2894.00000 3951.519708 282.00 7440.00
Plantago media per single flower inflorescence 4.89000 2.983991 2.78 7.00
Poa annua per ramet/tussock or individual plant 3674.20000 5415.575057 100.00 13000.00
Poa annua per single flower inflorescence 5071.25000 9952.567822 50.00 20000.00
Poa pratensis per ramet/tussock or individual plant 208.00000 NA 208.00 208.00
Poa trivialis per ramet/tussock or individual plant 299.50000 NA 299.50 299.50
Polygala comosa per multiple flower stem 18.00000 NA 18.00 18.00
Polygala vulgaris per multiple flower stem 23.00000 NA 23.00 23.00
Polygala vulgaris per ramet/tussock or individual plant 188.00000 NA 188.00 188.00
Polygala vulgaris per single flower inflorescence 2.00000 NA 2.00 2.00
Potentilla anserina per ramet/tussock or individual plant 69.90000 72.235933 9.70 150.00
Potentilla anserina per single flower inflorescence 36.25000 19.445436 22.50 50.00
Primula veris per ramet/tussock or individual plant 255.50000 21.920310 240.00 271.00
Primula veris per single flower inflorescence 32.10000 25.314423 14.20 50.00
Prunella grandiflora per multiple flower inflorescence 58.00000 NA 58.00 58.00
Prunella vulgaris per multiple flower inflorescence 192.00000 NA 192.00 192.00
Prunella vulgaris per ramet/tussock or individual plant 324.93750 328.628157 43.30 854.00
Prunella vulgaris per single flower inflorescence 4.00000 NA 4.00 4.00
Ranunculus bulbosus per ramet/tussock or individual plant 70.61818 35.252200 23.00 133.60
Ranunculus bulbosus per single flower inflorescence 22.80000 NA 22.80 22.80
Ranunculus repens per multiple flower stem 132.50000 10.606602 125.00 140.00
Ranunculus repens per ramet/tussock or individual plant 115.01000 62.723475 20.00 215.30
Ranunculus repens per single flower inflorescence 40.00000 14.142136 30.00 50.00
Rhinanthus angustifolius per ramet/tussock or individual plant 400.66667 428.294719 63.50 1225.00
Rhinanthus minor per ramet/tussock or individual plant 84.02857 70.433958 19.40 187.00
Rhinanthus minor per single flower inflorescence 14.16667 3.617089 10.00 16.50
Rumex acetosa per multiple flower inflorescence 102.50000 34.330841 64.50 147.50
Rumex acetosa per ramet/tussock or individual plant 537.13333 778.824000 45.40 2100.00
Rumex crispus per ramet/tussock or individual plant 12122.55556 14359.603956 1050.00 40000.00
Salvia pratensis per multiple flower stem 95.00000 NA 95.00 95.00
Salvia pratensis per ramet/tussock or individual plant 3352.50000 1771.302487 2100.00 4605.00
Salvia pratensis per single flower inflorescence 19.85000 22.415285 4.00 35.70
Sanguisorba minor per single flower inflorescence 3.00000 NA 3.00 3.00
Scabiosa columbaria per ramet/tussock or individual plant 98.00000 142.021125 24.00 311.00
Sedum sexangulare per multiple flower stem 148.00000 NA 148.00 148.00
Senecio erucifolius per multiple flower stem 1613.25000 653.013112 1151.50 2075.00
Senecio jacobaea per multiple flower stem 4462.50000 NA 4462.50 4462.50
Senecio jacobaea per ramet/tussock or individual plant 56920.00000 40538.544621 2100.00 100000.00
Senecio vulgaris per multiple flower inflorescence 101.00000 NA 101.00 101.00
Senecio vulgaris per ramet/tussock or individual plant 8741.16667 14552.529408 720.00 38000.00
Silene dioica per ramet/tussock or individual plant 3892.92000 4102.989792 220.00 9300.00
Silene dioica per single flower inflorescence 244.00000 62.225397 200.00 288.00
Silene nutans per ramet/tussock or individual plant 255.80000 NA 255.80 255.80
Sonchus asper per ramet/tussock or individual plant 47470.53333 153108.490438 330.00 600000.00
Stellaria holostea per multiple flower stem 23.37500 14.236192 13.00 44.00
Stellaria holostea per ramet/tussock or individual plant 19.00000 NA 19.00 19.00
Stellaria media per ramet/tussock or individual plant 14000.00000 1732.050808 11000.00 15000.00
Stellaria media per single flower inflorescence 10.95000 4.087787 8.00 17.00
Symphytum officinale per multiple flower stem 72.50000 NA 72.50 72.50
Symphytum officinale per ramet/tussock or individual plant 808.00000 837.214429 216.00 1400.00
Tanacetum vulgare per multiple flower stem 232.00000 NA 232.00 232.00
Tanacetum vulgare per ramet/tussock or individual plant 6686.00000 6049.897768 425.00 12500.00
Thymus pulegioides per multiple flower inflorescence 33.11000 NA 33.11 33.11
Thymus pulegioides per ramet/tussock or individual plant 528.50000 NA 528.50 528.50
Thymus pulegioides per single flower inflorescence 4.00000 NA 4.00 4.00
Tragopogon pratensis per ramet/tussock or individual plant 190.00000 NA 190.00 190.00
Trifolium campestre per multiple flower inflorescence 29.50000 NA 29.50 29.50
Trifolium campestre per ramet/tussock or individual plant 142.50000 NA 142.50 142.50
Trifolium campestre per single flower inflorescence 1.00000 NA 1.00 1.00
Trifolium dubium per ramet/tussock or individual plant 92.00000 NA 92.00 92.00
Trifolium dubium per single flower inflorescence 1.00000 NA 1.00 1.00
Trifolium medium per multiple flower stem 6.30000 NA 6.30 6.30
Trifolium medium per ramet/tussock or individual plant 70.00000 56.568542 30.00 110.00
Trifolium medium per single flower inflorescence 1.00000 NA 1.00 1.00
Trifolium ochroleucon per ramet/tussock or individual plant 275.00000 NA 275.00 275.00
Trifolium pratense per multiple flower inflorescence 65.80000 39.173716 38.10 93.50
Trifolium pratense per multiple flower stem 19.80000 11.043550 11.80 32.40
Trifolium pratense per ramet/tussock or individual plant 530.00000 NA 530.00 530.00
Trifolium pratense per single flower inflorescence 1.00000 0.000000 1.00 1.00
Trifolium repens per multiple flower inflorescence 118.00000 110.308658 40.00 196.00
Trifolium repens per multiple flower stem 10.10000 NA 10.10 10.10
Trifolium repens per ramet/tussock or individual plant 421.33333 505.732472 64.00 1000.00
Trifolium repens per single flower inflorescence 53.16667 83.869442 3.50 150.00
Trisetum flavescens per multiple flower stem 217.50000 NA 217.50 217.50
Trisetum flavescens per ramet/tussock or individual plant 25000.00000 NA 25000.00 25000.00
Triticum aestivum per ramet/tussock or individual plant 471.50000 NA 471.50 471.50
Valeriana dioica per ramet/tussock or individual plant 42.50000 24.748737 25.00 60.00
Valeriana officinalis per multiple flower stem 413.00000 NA 413.00 413.00
Valeriana officinalis per ramet/tussock or individual plant 398.00000 366.281313 139.00 657.00
Verbascum lychnitis per ramet/tussock or individual plant 109830.25000 30574.236558 88211.00 131449.50
Verbascum lychnitis per single flower inflorescence 153.00000 NA 153.00 153.00
Veronica chamaedrys per ramet/tussock or individual plant 59.80000 115.081162 3.00 450.00
Vicia cracca per multiple flower stem 66.55000 31.890516 44.00 89.10
Vicia cracca per ramet/tussock or individual plant 154.25000 104.716681 55.00 300.00
Vicia cracca per single flower inflorescence 5.00000 1.414214 4.00 6.00
Vicia hirsuta per ramet/tussock or individual plant 168.48000 113.055526 12.40 300.00
Vicia sepium per multiple flower stem 6.10000 5.185235 1.60 13.50
Vicia sepium per ramet/tussock or individual plant 76.50000 95.459416 9.00 144.00
Vicia sepium per single flower inflorescence 7.00000 4.242641 4.00 10.00
Vicia tetrasperma per ramet/tussock or individual plant 280.42000 161.453962 12.10 450.00
Vicia tetrasperma per single flower inflorescence 4.00000 NA 4.00 4.00
Vicia villosa per ramet/tussock or individual plant 250.00000 50.000000 200.00 300.00

The number of seeds was not measured for the same reproductive unit in all species. To make measures across species as standardized as possible, when available, we gave preferrence to values reported for "ramet/tussock or individual plant" first, "multiple flower inflorescence" or "multiple flower stem" second, "single flower inflorescence" third, and "unknown" at last. Measures of seed numbers taken "per square meter" where excluded because thes could not be approach to individual quantities. Similar to seed mass, the variation in trait values is passed down to the model by inputing minimal and maximal values, from which individual values are drawn, following an Uniform distribution.

seednumber_edm <- bind_rows(filter(seed_number_unit, str_detect(repro_unit, "individual")),
                            filter(seed_number_unit,
                                   str_detect(repro_unit, "multiple") &
                                   !(sp %in% (filter(seed_number_unit,
                                                     str_detect(repro_unit, "individual"))$sp))),
                            filter(seed_number_unit,
                                   str_detect(repro_unit, "single") &
                                   !(sp %in% (filter(seed_number_unit, 
                                                     str_detect(repro_unit, "individual") |
                                                     str_detect(repro_unit, "multiple"))$sp))),
                            filter(seed_number_unit,
                                   str_detect(repro_unit, "unknown") &
                                   !(sp %in% (filter(seed_number_unit, 
                                                     str_detect(repro_unit, "individual") |
                                                     str_detect(repro_unit, "multiple") |
                                                     str_detect(repro_unit, "single"))$sp))))%>%
    left_join(spp_list,.)%>%
    dplyr::select(-repro_unit)

seednumber_edmunif <- seednumber_edm %>%
  dplyr::select(sp, seednumber_min, seednumber_max)

3.3.5 Life span

Species life spans were retrieved from the LEDA database [@kleyerleda2008], and from the BiolFlor database [@klotzbiolflor2002], if not available in LEDA (detailed below). The original, discrete, LEDA classification (van Groenendael, J.M.) is based upon measurements, observations or published data (Table @ref(tab:class-span)). For non-clonal or closely-knitted clones, the lifespan is the number of years of appearance of the adult.

lifespan_leda %>%
    mutate(leda_span = str_replace_all(leda_span, pattern = "_", replacement = " ")) %>%
    dplyr::select("Life span (LEDA)" = leda_span) %>%
    unique %>%
    kable(caption = "Categories of life span values reported in the LEDA database.",
          longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    footnote(alphabet = c("\"Strictly monocarpic bi-annuals\" only reproduce once.",
                          "In some cases, the same species is classified as both annual and perennial. Mean of span values was taken as the final value."))
Categories of life span values reported in the LEDA database.
Life span (LEDA)
annuals
perennials
summer annuals
winter annuals
strict monocarpic bi-annuals and poly-annuals
poly-annuals < 5 years (short-lived perennials)
poly-annuals > 50 years (long-lived perennials)
poly-annuals 5-50 years (medium-lived perennials)
a "Strictly monocarpic bi-annuals" only reproduce once.
b In some cases, the same species is classified as both annual and perennial. Mean of span values was taken as the final value.

Quantitative weekly values are necessary to control density-independent mortality during the simulation individuals older than the lifespan are killed deterministically). LEDA's categorical classification of lifespans is converted to weekly values by assigning values falling inside the interval defined by the categories. The variation in trait values is passed down to the model by inputing minimal and maximal values, from which individual values are drawn, following an Uniform distribution.

lifespan <- lifespan_leda %>%
  left_join(spp_list,.)%>%
  mutate(
    span = case_when(
     leda_span == "poly-annuals_>_50_years_(long-lived_perennials)" ~ 50*52,
     leda_span %in% c("poly-annuals_5-50_years_(medium-lived_perennials)", "perennials") ~ 30*52,
     leda_span == "poly-annuals_<_5_years_(short-lived perennials)" ~ 5*52,
     leda_span == "strict_monocarpic_bi-annuals_and_poly-annuals" ~ 2*52,
     leda_span%in%c("summer_annuals","winter_annuals", "annuals") ~ 1*52))%>%
  dplyr::select(sp,span)%>%
  group_by(sp)%>%
  summarize(span_mean = mean(span),
            span_sd = sd(span),
            span_min = min(span),
            span_max = max(span))%>% # Keep mean values for conflicting values
  distinct()%>%
  mutate(span_sd = case_when(
    is.na(span_sd) & !(is.na(span_mean)) ~ 0.1*span_mean,
    TRUE ~ span_sd))

lifespan_edmunif_leda <- lifespan%>%
  dplyr::select(sp, span_min, span_max)

3.3.5.1 Missing values

Estimates of life span duration are missing for 57 species (Table @ref(tab:nas-spans)).

# save species for which lifespan is missing
nas_spans <- lifespan_edmunif_leda %>% 
    filter(is.na(span_min), is.na(span_max)) %>%
    dplyr::select(sp)
nas_spans %>%
    mk_itspp() %>%
    kable(caption = "Species for which life span values were missing in the LEDA database.",
          longtable = TRUE, booktabs = TRUE) %>%
    kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
    scroll_box(width = "100%", height = "400px")
Species for which life span values were missing in the LEDA database.
species
Achillea millefolium
Acinos arvensis
Aegopodium podagraria
Allium schoenoprasum
Anthriscus sylvestris
Arabis hirsuta
Artemisia vulgaris
Astragalus glycyphyllos
Brachypodium pinnatum
Briza media
Campanula rapunculoides
Campanula rotundifolia
Carex leporina
Carex ornithopoda
Centaurea jacea
Centaurea scabiosa
Cerastium holosteoides
Cichorium intybus
Cirsium acaule
Cirsium oleraceum
Clinopodium vulgare
Dactylis glomerata
Daucus carota
Elytrigia repens
Epilobium angustifolium
Equisetum arvense
Festuca pratensis
Filipendula vulgaris
Fragaria vesca
Galium mollugo
Galium verum
Geum urbanum
Helianthemum nummularium
Heracleum sphondylium
Hieracium lachenalii
Hypericum perforatum
Inula conyzae
Lotus corniculatus
Medicago falcata
Melampyrum nemorosum
Melampyrum sylvaticum
Mentha verticillata
Myosotis sylvatica
Onobrychis viciifolia
Ononis spinosa
Origanum vulgare
Plantago major
Plantago media
Poa annua
Poa trivialis
Potentilla neumanniana
Senecio ovatus
Stachys germanica
Tanacetum vulgare
Taraxacum laevigatum
Taraxacum officinale
Veronica teucrium

The classification of life spans in the BiolFlor database is smaller than in the LEDA database, having three, instead of five classes: annuals, biannuals, and pluriennials. For annuals and biannuals, weekly values are straightforward. For pluriennals, we atributed the same value used for LEDA's "medium-lived" perennials (30 years), to avoid the extremes of that classification, i.e. "short" and "long-lived" perennials.

lifespan_edmunif <- lifespan_biolflor%>% 
  mutate(
    span_min = case_when(
     biolflor_span == "annual" ~ 1*52,
     biolflor_span == "biannual" ~ 2*52,
     str_detect(biolflor_span, "pluriennial-pollakanthic") ~ 30*52),
    span_max = span_min)%>%
  dplyr::select(-biolflor_span)%>%
  bind_rows(filter(lifespan_edmunif_leda, !is.na(span_min), !is.na(span_max)))

3.3.6 Clonality

Species clonal ability was retrieved from the LEDA database [@kleyerleda2008], which reports the type of organ structure that enables clonal reproduction. Species that are not in listed in the LEDA database were considered to be non-clonal.

clonality_edm <- clonal_leda%>%  
  left_join(spp_list,.)%>%
  distinct()%>%
  mutate(clonality = case_when(
    (is.na(organ1) & is.na(organ2) & is.na(organ3) & is.na(organ4)) ~ FALSE,
    TRUE ~ TRUE))%>%
  dplyr::select(sp, clonality)

3.3.7 Age of first flowering

Species age of first flowering were retrieved from the LEDA database [@kleyerleda2008] These values are reported as intervals, but quantitative weekly values are necessary to control juvenile maturation during the simulation and to parameterize the biomass production rate (detailed in Metabolic biological rates section of Implementation verification). Weekly values were taken from an Uniform probability distribution covering the interval reported. If more than one value was reported for the same species, we use the mean value of the randomly assigned precise values. In some instances, this procedure averaged over different intervals. For that reason, if the same interval had been reported multiple times, the repetition was taken into account when calculating the mean.

firstflower_edm <- firstflower_leda %>%
  left_join(spp_list,.)%>%
  mutate(
    firstflower = case_when(
      first_flower == "Within_1_year" ~ runif(1,4,52), 
      first_flower == "Between_1_and_5_years" ~ runif(1,1*52,5*52),
      first_flower == "Over_5_years" ~ runif(1,1*52,10*52)))%>%
  group_by(sp)%>%
  summarize(firstflower_mean = mean(firstflower),
            firstflower_sd = sd(firstflower),
            firstflower_min = min(firstflower),
            firstflower_max = max(firstflower))

3.3.7.1 Mismatching values

In some instances there was a conflict between the limit values of age of first flower and duration of life span (age of first flowering > life span). Values of age of first flowering were scaled down to fit inside the reported life span.

firstflower_edmunif <- firstflower_edm%>%
  dplyr::select(sp, firstflower_min, firstflower_max)%>%
  left_join(lifespan_edmunif)%>%
  mutate(firstflower_min = 
           case_when(
             firstflower_min > span_min ~ 0.5*span_min,
             TRUE ~ firstflower_min),
         firstflower_max = 
           case_when(
             firstflower_max > span_min ~ firstflower_min,
             firstflower_max > span_max ~ firstflower_min,
             TRUE ~ firstflower_max))%>%
  dplyr::select(sp, firstflower_min, firstflower_max)

3.3.8 Flower phenology

Flower phenology, i.e. month of beginning and ending of flowering season, was retrieved from the BiolFlor database [@klotzbiolflor2002]. Monthly ordinal values were converted to weekly values to control flowering during the simulation. Any month was assumed to contain 4.5 weeks.

flowerphenology_edm <- flowerphenology_biolflor %>%
  mutate(species = str_replace_all(species, pattern = " ", replacement = "_"))%>%
  ## convert monthly values to weekly values
    mutate(floron = round(ceiling((bluehbeginn_monate-1)*4.5), digits = 0),
  ##  add 4 weeks to the ending month to account for the entirety of it
         floroff = round(floor((bluehende_monate-1)*4.5 + 4), digits = 0))%>%
  dplyr::select(species, floron, floroff)

3.3.9 Seed longevity and bank duration

Species dispersal types were retrieved from the LEDA database [@kleyerleda2008]. The LEDA database provides two files on seed (seed_long.txt) and seed bank longevity, (seed*bank.txt). For our purposes, the files are redundant, because seed*bank.txt contains information on more species, including all the ones in seed_long.txt.

seedbank_goet <- seedbank_leda %>%
  left_join(spp_list,.)%>%
  distinct()%>%
  filter(!(is.na(duration)))
  
seedlongevity_goet <- seedlongevity_leda %>%
  left_join(spp_list,.)%>%
  distinct()%>%
  filter(!(is.na(longevity)))

# check if species in seedlong (n = 23) match the ones in seedbank (n = 46)
all(seedlongevity_goet$sp %in% seedbank_goet$sp)
## [1] TRUE

Therefore, seed*bank.txt is going to be used to assign seed longevity. Nevertheless, only 46 species of the 194 species listed for the calcareous grasslands in Göttingen have information on the duration of the seed-bank. The missing values will be imputed, as described in the next section.

seedbank_edm <- seedbank_leda%>%
  left_join(spp_list,.)%>%
  distinct()%>%
  mutate(duration = case_when(
    duration == "transient" ~ runif(n = 1, min = 1, max = 52),
    duration == "short-term_persistent" ~ runif(n = 1, min = 1*52, max = 5*52),
    duration == "long-term_persistent" ~ runif(n = 1, min = 5*52, max = 10*52)))%>%
  group_by(sp)%>%
  summarise(bankduration_mean = mean(duration),
            bankduration_sd = sd(duration),
            bankduration_min = min(duration),
            bankduration_max = max(duration))%>%
  mutate(bankduration_sd = case_when(
    is.na(bankduration_sd) & !(is.na(bankduration_mean)) ~ 0.1*bankduration_mean,
    TRUE ~ bankduration_sd))

seedbank_edmunif <- seedbank_edm%>%
  dplyr::select(sp, bankduration_min, bankduration_max)

3.3.10 Available data

All data retrieved from the LEDA and BiolFlor databases is listed in [Appendix 2][appendix-traitsdatabases].

traitsleda_incomplete_unif <- spp_list%>%
  left_join(seednumber_edmunif)%>%
  left_join(dispersal_edm)%>%
  left_join(seedmass_edm)%>%
  left_join(maxmass_edm)%>%
  left_join(lifespan_edmunif)%>%
  left_join(firstflower_edmunif)%>%
  left_join(seedbank_edmunif)%>%
  left_join(clonality_edm)%>%
  distinct()

3.3.11 Imputation of missing trait values

Missing values are handled separately, after all the data available in LEDA and BiolFlor databases has been processed. We performed a multiple imputation of these values [@josse-missMDA]. This procedure is performed by an iterative principal component analysis algorithm (PCA), whereby, starting from a randomly imputed value, missing values are recalculated until the algorithm converges to the principal components of the complete set of variables [@josse-missMDA]. This procedure makes it possible to account for the global similarities between species and correlations between trait values, which can be interpreted as species trait syndromes. Imputed values, however, are not used to calibrate the model.

summary(traitsleda_incomplete_unif)
##       sp            seednumber_min      seednumber_max        kernel         
##  Length:194         Min.   :     1.00   Min.   :     3.0   Length:194        
##  Class :character   1st Qu.:    41.98   1st Qu.:   191.5   Class :character  
##  Mode  :character   Median :   189.00   Median :   500.0   Mode  :character  
##                     Mean   :  5318.69   Mean   : 21135.1                     
##                     3rd Qu.:   538.75   3rd Qu.:  6750.0                     
##                     Max.   :200000.00   Max.   :600000.0                     
##                     NA's   :70          NA's   :70                           
##     seedmass           maxmass          span_min       span_max   
##  Min.   :0.000100   Min.   : 25.62   Min.   :  52   Min.   :  52  
##  1st Qu.:0.001000   1st Qu.:118.80   1st Qu.: 104   1st Qu.:1560  
##  Median :0.001000   Median :118.80   Median :1560   Median :1560  
##  Mean   :0.000821   Mean   :100.77   Mean   :1128   Mean   :1369  
##  3rd Qu.:0.001000   3rd Qu.:118.80   3rd Qu.:1560   3rd Qu.:1560  
##  Max.   :0.001000   Max.   :118.80   Max.   :1560   Max.   :2600  
##  NA's   :23         NA's   :23                                    
##  firstflower_min  firstflower_max  bankduration_min  bankduration_max 
##  Min.   : 18.77   Min.   : 18.77   Min.   :  3.876   Min.   :  3.876  
##  1st Qu.: 18.77   1st Qu.: 18.77   1st Qu.:  3.876   1st Qu.:  3.876  
##  Median : 18.77   Median :105.60   Median :  3.876   Median :149.458  
##  Mean   : 55.89   Mean   : 77.84   Mean   :  7.111   Mean   :155.042  
##  3rd Qu.:105.60   3rd Qu.:105.60   3rd Qu.:  3.876   3rd Qu.:385.780  
##  Max.   :310.49   Max.   :310.49   Max.   :149.458   Max.   :385.780  
##  NA's   :38       NA's   :38       NA's   :149       NA's   :149      
##  clonality      
##  Mode :logical  
##  FALSE:43       
##  TRUE :151      
##                 
##                 
##                 
## 
corleda_unif <- cor(dplyr::select(traitsleda_incomplete_unif, -sp, -kernel, -clonality),
                    use = "na.or.complete")
## Warning in cor(dplyr::select(traitsleda_incomplete_unif, -sp, -kernel, -
## clonality), : the standard deviation is zero
corrplot(corleda_unif, method = "number", type = "upper")
Correlation between the

Correlation between the

traitsleda4impute_unif <- as.data.frame(dplyr::select(traitsleda_incomplete_unif,
                                                      -sp, -kernel, -clonality))
traitsleda_imput_unif <- as.data.frame(imputePCA(traitsleda4impute_unif,
                                                 ncp = 2, scale = TRUE)$completeObs)
summary(traitsleda_imput_unif)
##  seednumber_min      seednumber_max        seedmass            maxmass      
##  Min.   :-19160.51   Min.   :-92587.9   Min.   :0.0001000   Min.   : 25.62  
##  1st Qu.:    19.43   1st Qu.:   112.5   1st Qu.:0.0007891   1st Qu.: 97.47  
##  Median :   208.75   Median :   688.5   Median :0.0010000   Median :118.80  
##  Mean   :  6012.30   Mean   : 22533.2   Mean   :0.0008163   Mean   :100.28  
##  3rd Qu.:  3211.15   3rd Qu.: 14124.8   3rd Qu.:0.0010000   3rd Qu.:118.80  
##  Max.   :200000.00   Max.   :600000.0   Max.   :0.0010332   Max.   :122.38  
##     span_min       span_max    firstflower_min   firstflower_max  
##  Min.   :  52   Min.   :  52   Min.   :  6.332   Min.   :  9.277  
##  1st Qu.: 104   1st Qu.:1560   1st Qu.: 18.773   1st Qu.: 18.773  
##  Median :1560   Median :1560   Median : 26.000   Median :105.262  
##  Mean   :1128   Mean   :1369   Mean   : 59.086   Mean   : 81.857  
##  3rd Qu.:1560   3rd Qu.:1560   3rd Qu.:105.596   3rd Qu.:105.596  
##  Max.   :1560   Max.   :2600   Max.   :310.487   Max.   :310.487  
##  bankduration_min  bankduration_max 
##  Min.   :-16.188   Min.   :  3.876  
##  1st Qu.:  1.615   1st Qu.:112.824  
##  Median :  3.876   Median :146.124  
##  Mean   :  6.502   Mean   :148.827  
##  3rd Qu.:  6.941   3rd Qu.:170.577  
##  Max.   :149.458   Max.   :385.780

3.3.11.1 Special case: Seed number

Note that the procedure generated negative values for seed number and for seed bank duration.

For the values of seed number, a separate imputation including only values of seed number and seed mass (the trait value mostly correlated to seed number) is able to retain only positive values.

seedleda4impute_unif <- as.data.frame(dplyr::select(traitsleda_incomplete_unif,
                                                    seednumber_min,
                                                    seednumber_max,
                                                    seedmass))
ndim_seed <- estim_ncpPCA(seedleda4impute_unif, scale = TRUE)
seedleda_imput_unif <- as.data.frame(imputePCA(seedleda4impute_unif, ncp = 1, scale = TRUE)$completeObs)
summary(seedleda_imput_unif)
##  seednumber_min     seednumber_max      seedmass        
##  Min.   :     1.0   Min.   :     3   Min.   :0.0001000  
##  1st Qu.:   102.0   1st Qu.:   300   1st Qu.:0.0008198  
##  Median :   673.5   Median :  6832   Median :0.0010000  
##  Mean   :  5889.9   Mean   : 22959   Mean   :0.0008198  
##  3rd Qu.:  2100.0   3rd Qu.: 22219   3rd Qu.:0.0010000  
##  Max.   :200000.0   Max.   :600000   Max.   :0.0010000

For the values of seed-bank duration, however, we could not find other trait values to support multiple imputation. Thus, the mean value of all species was used.

traitsleda_complete_unif <- bind_cols(dplyr::select(traitsleda_incomplete_unif,
                                             c(sp, kernel, clonality, bankduration_min)),
                                      dplyr::select(traitsleda_imput_unif,
                                             c(-seednumber_min, 
                                               -seednumber_max,
                                               -bankduration_min)), # imputation puts negative values
                                      dplyr::select(seedleda_imput_unif,
                                             -seedmass))%>%
  mutate(bankduration_min = case_when(
    is.na(bankduration_min) ~ mean(bankduration_min, na.rm=TRUE),
    TRUE ~ bankduration_min))%>%
  dplyr::select(sp:clonality, seedmass:bankduration_max, bankduration_min, seednumber_min:seednumber_max)

3.3.11.2 Comparison between original and imputed values

bind_rows(dplyr::select(traitsleda_incomplete_unif,
                        c(seednumber_min, seednumber_max, seedmass, maxmass,
                          span_min, span_max, firstflower_min, firstflower_max,
                          bankduration_min, bankduration_max)) %>%
          pivot_longer(.,
                       cols = c(seednumber_min, seednumber_max, seedmass, maxmass,
                                span_min, span_max, firstflower_min, firstflower_max,
                                bankduration_min, bankduration_max),
                       names_to = "trait",
                       values_to = "value") %>%
          mutate(origin = "available"),
          dplyr::select(traitsleda_incomplete_unif,
                        c(seednumber_min, seednumber_max, seedmass, maxmass,
                          span_min, span_max, firstflower_min, firstflower_max,
                          bankduration_min, bankduration_max)) %>%
          pivot_longer(.,
                       cols = c(seednumber_min, seednumber_max, seedmass, maxmass,
                                span_min, span_max, firstflower_min, firstflower_max,
                                bankduration_min, bankduration_max),
                       names_to = "trait",
                       values_to = "value") %>%
          mutate(origin = "imputation")) %>%
    mutate(trait = recode_factor(trait,
                                 firstflower_min =  "Age of first flowering (min.)",
                                 firstflower_max = "Age of first flowering (max.)",
                                 maxmass = "Adult biomass (max.)",
                                 seedmass = "Seed biomass",
                                 bankduration_min = "Seedbank duration (min.)",
                                 bankduration_max = "Seedbank duration (max.)",
                                 seednumber_min = "Seed number (min.)",
                                 seednumber_max = "Seed number (max.)",
                                 span_min = "Life span (min.)",
                                 span_max = "Life span (max.)")) %>%
    ggplot(aes(x = value, color = origin, fill = origin)) +
    geom_histogram() +
    scale_colour_manual(values = viridis(n = 2, alpha = 0.5),
                        aesthetics = c("colour", "fill"))+
    facet_wrap(~trait, nrow = 2, scales = "free") +
    labs(colour = "Data origin", fill = "Data origin") +
    theme(legend.position = "bottom")
## Warning: Removed 1120 rows containing non-finite values (stat_bin).

3.3.12 Metabolic biological rates

The metabolic normalization constants, \(b_{0}\), are taxa and region-dependent values that adapt the allometric body size-rate allometric relationship to different biological rates, for a given set of species in a given set of environmental conditions (@browntoward2004) Therefore, the constants should be calibrated according to a pre-defined list of temperatures and species traits values. Following, we report the calibration process for species present at calcareous grasslands in the vicinity of the city of Göttingen, Germany (@krausshabitat2010).

3.3.12.1 Biomass growth rates

The biomass growth rate is parameterised to reproduce the Richards curve (@richardsflexible1959), also known as generalized logistic function (S-shaped), derived from the Bertalanffy growth function and adapted to plant growth [@richardsflexible1959].

In its original formulation, size (or weight, length, height) at any time (\(l_{t}\)) is defined by \(A\), the lower asymptote; \(L\), the upper assymptote; \(B_{grow}\), the growth rate; \(t_{m}\), the time of maximum growth; and \(Q\), a parameter that affects the point of inflection of the curve. \[l_{t} = A + \frac{L}{(1 + Q*e^{-B_{grow}*(t-t_{m})})^{1/Q}}\]

We adapted plant size traits available in the literature to parameterize this equation and derive growth rates \(B\). We used a plant's seed mass value as the lower asymptote (\(size_{min}\)), and the maximal size as defined by @weissgrazing2014 (and detailed below) as the upper asymptote \(size_{max}\); the age of first flowering (\(age_{f}\)) is set as the the time of maximum growth for all species. Parameter \(Q\) affects the height at which the point of inflection happens, while \(B\) is the rate of growth: \[size = size_{min} + \frac{size_{max}}{(1 + Q*exp(-B_{grow}*(t-age_{1^{st}flower})^{1/Q}}\]

richards5 <- function(age, seedmass, maxmass, Q, firstflower, Bg){
  mass = seedmass + maxmass/((1 + Q*exp(-Bg*(c(1:age)-firstflower)))^(1/Q))
  return(mass)
}
plot(c(1:52), 
     richards5(age = 52, seedmass = 10^(-4), maxmass = fullsize(10), Q = 1, firstflower = 26, Bg = 1),
     type = "l", lwd = 2,
     xlab = "Age (weeks)", ylab = "Size (g)", main = "Richards curve growth for an annual small plant")
lines(c(1:52), 
      richards5(age = 52, seedmass = 10^(-4), maxmass = fullsize(10), Q = 0.2, firstflower = 26, Bg = 1),
      col = "darkorchid1", lwd = 2)
lines(c(1:52), 
      richards5(age = 52, seedmass = 10^(-4), maxmass = fullsize(10), Q = 5, firstflower = 26, Bg = 1),
      col = "deeppink", lwd = 2)
lines(c(1:52), 
      richards5(age = 52, seedmass = 10^(-4), maxmass = fullsize(10), Q = 5, firstflower = 26, Bg = 2),
      col = "goldenrod1", lwd = 2)
lines(c(1:52), 
      richards5(age = 52, seedmass = 10^(-4), maxmass = fullsize(10), Q = 5, firstflower = 26, Bg = 0.5),
      col = "dodgerblue2", lwd = 2)
abline(v = 26, lty = 2) #v at firstflower
legend("bottomright", 
       legend = c("Q = 1, B = 1", "Q = 0.2, B = 1", "Q = 5, B = 1", "Q = 5, B = 2", "Q = 5, B = 0.5"),
       fill = c("black", "darkorchid1", "deeppink", "goldenrod1", "dodgerblue2"),
       bty = "n")

Growth calculated for the first time-step is particularly sensitive to the value of \(B_{grow}\). We use \(Q=5\), as it generates higher growth during the juvenile phase of development (before the age of first flowering).

Out of the five parameters used to model the Richards curve, three can be related to plant traits available in the databases we consulted: age of first flowering, and minimal and maximal sizes. We used these three traits to identify "growth groups", i.e. groups of species that should grow between their respective minimal and maximal sizes, within the time frame of the age of first flowering. By reclassfying values of age of first flowering into one month (4 weeks) interval classes and combining it with the three size classes available (@ref(tab:size-classes), we obtained thirteen "growth groups" (each bin in Fig.@ref(fig:growth-groups) is a group).

sizeage.df <- spp_list %>%
    left_join(dplyr::select(firstflower_edm, c(sp, firstflower_mean))) %>%
    left_join(dplyr::select(lifespan, c(sp, span_mean)), by = "sp") %>%
    left_join(dplyr::select(seednumber_edm, c(sp, seednumber_mean)), by = "sp") %>%
    left_join(seedmass_edm) %>%
    left_join(maxmass_edm) %>%
    distinct() %>%
    inner_join(weiss_goetmasses, by = "sp") %>%
    dplyr::select(seednumber_mean, seedmass, maxmass, span_mean, firstflower_mean)

plot_grid(ggplot(data = sizeage.df,
                 aes(x = firstflower_mean))+
          geom_histogram(binwidth = 4)+ ## one month interval class of age of 1st flower
          scale_fill_viridis(discrete = TRUE)+
          facet_wrap(~seedmass,
                     labeller = labeller(seedmass = sizes_facets))+
          labs(y = "Count") +
          theme(axis.title.x = element_blank(),
                axis.text.x = element_text(angle = 50, vjust = 0.5, size = 9),
                axis.text.y = element_text(size = 9),
                panel.border = element_rect(colour = "grey77", fill = NA),
                legend.position = "none"),
          ggplot(data = sizeage.df,
                 aes(x = firstflower_mean))+
          geom_histogram(binwidth = 4)+
          theme(axis.text.x = element_text(angle = 50, vjust = 0.5, size = 9),
                axis.title.x = element_text(size = 10),
                axis.text.y = element_text(size = 9)) +
          labs(x = "Age of first flowering (weeks)",
               y = "Count"),
          ncol = 1, nrow = 2,
          rel_heights = c(2, 1),
          labels = c("A)", "B)"))
## Warning: Removed 5 rows containing non-finite values (stat_bin).

## Warning: Removed 5 rows containing non-finite values (stat_bin).
Growth groups characterized by age of first flowering and species sizes. A) Distribution of values of age of first flowering among species of each size group (small, medium, and large). Each bin covers an interval of 4 weeks (one month). In combination, groups of age of first flowering and groups of size give rise to 13 groups of growth. B) Overall distribution of age of first flowering, showing only eight groups of

Growth groups characterized by age of first flowering and species sizes. A) Distribution of values of age of first flowering among species of each size group (small, medium, and large). Each bin covers an interval of 4 weeks (one month). In combination, groups of age of first flowering and groups of size give rise to 13 groups of growth. B) Overall distribution of age of first flowering, showing only eight groups of

Ideally, the growth curve would have its maximal rate of growth at the age of first flowering, and maximal size would be achieved before plants reached their maximal life span. The Richards curves has a parameter to control the first (\(t_{m} = age_{f}\)), but not the latter. Nonetheless, the Richards curve assures that the maximal asymptote (maximal size) is achieved shortly after the point of inflection (\(t_{m} = age_{f}\)).

growthgroups <- sizeage.df %>%
  filter(!is.na(firstflower_mean)) %>%
  # get the upper values of the first age of flowering bins (discretize() returns the indices of groups, but I need the actual values)
  mutate(groupflowering = seq(from = min(.$firstflower_mean, na.rm = TRUE), 
                              to = max(.$firstflower_mean, na.rm = TRUE), 
                              by = 4)[arules::discretize(firstflower_mean,
                                        method = "fixed",
                                        breaks = seq(
                                            from = min(firstflower_mean),
                                            to = max(firstflower_mean)+4,
                                            by = 4),
                                        labels = FALSE)])%>%
  dplyr::select(seedmass, maxmass, groupflowering)%>%
  distinct()%>%
  arrange(maxmass)%>%
  mutate(growth_grp = paste("g", row.names(.), sep = ""))%>%
  dplyr::select(growth_grp, seedmass, maxmass, groupflowering)

# vector version of the richards growth function
richards5_4plot <- function(seedmass, maxmass, groupflowering){
  # constants necessary for the richards curves
  Bg = 0.25; Q = 5
  growth_span = 3*52
  mass = seedmass + maxmass/((1 + Q*exp(-Bg*(c(1:growth_span)-groupflowering)))^(1/Q))
  return(data.frame(t=c(1:growth_span),
                    mass = mass))
}

growth_curves <- apply(dplyr::select(growthgroups, -growth_grp), 1, 
                                    function(x)do.call(richards5_4plot, as.list(x)))%>%
    setNames(paste("g", seq(1,13), sep = ""))%>%
    bind_rows(., .id = "growth_grp") %>% 
    left_join(growthgroups)%>%
    as.data.frame

growth_curves %>%
    mutate(groupflowering = round(groupflowering, digits = 0))%>%
    ggplot(aes(x = t, y = mass))+
    geom_line(aes(color = as.factor(seedmass), group = seedmass))+
    geom_vline(aes(xintercept = groupflowering), color = "deeppink")+
    geom_hline(aes(yintercept = maxmass), color = "salmon", linetype = "dashed")+
    facet_wrap(~groupflowering, nrow = 2, 
               scales = "free_y",
               labeller = labeller(seedmass = sizes_facets))+
    labs(x = "Time (weeks)",
         y = "Total biomass (g)")+
  scale_color_viridis(discrete = TRUE)+
  theme(legend.position = "bottom")
Example of Richards curves for the 13 groups of size and ages of first flowering.

Example of Richards curves for the 13 groups of size and ages of first flowering.

3.3.12.2 Calibration of growth normalization constants

The \(B\) value chosen above was fitted to a model (the Richards curve) that assumes continuous growth (constant rate). In the EDM model, however, growth rate depends on environmental temperature and the individual's biomass. For temperature regions, this means that growth is concentrated in warmer months and drastically decreased during colder ones (biomass actually drops due fall frost and winter dieback). When calibrating the growth normalization constant \(b_{0}\), therefore, we must account for the fact that the rate must somehow balance itself during the whole year. Thus, we calibrate it using the year mean temperatures: in higher temperatures, the growth rate increases above the mean, in lower temperatures, it decreases. A caveat of this approach is the assumption of the same growth rate for all species, regardless of age of first flowering or plant size, as in (. This generates different normalization constants according to species sizes. While the proposition of metabolic theory is to use one normalization value per biological rate, variations in this values are expected at small scales [@browntowards2004, @siblymtebook]. Despite this shortcoming, the parameters thus chosen generate growth curves that approximate the Richard curves we indented to reproduce in the first place (Table @ref(tab:growth-pars), Fig. @ref(fig:check-growth-curves)).

growth_pars <- expand.grid(
  seedmass = c(0.0001, 0.0003, 0.001),
  B = c(0.25))%>%
  mutate(b0grow = (B)/((seedmass^(-1/4))*exp(-aE/(Boltz*mean(tempseries_goettingen$meantemp_K)))))%>% #per mass rate, therefore alpha = -1/4
  arrange(seedmass)%>%
  # add cloumn of max mass
  mutate(maxmass = case_when(
    seedmass == 0.0001 ~ 2*10+10^(3/4),
    seedmass == 0.0003 ~ 2*20+20^(3/4),
    seedmass == 0.001 ~ 2*50+50^(3/4)))%>%
  mutate(size_label = sizes_facets[as.character(seedmass)])
growth_pars %>%
    rename("Seed mass" = "seedmass",
           "Growth rate (B)" = "B",
           "Normalization constant (b_{0})" = "b0grow",
           "Max. size (g)" = "maxmass",
           "Size group" = "size_label") %>% 
    knitr::kable(caption = "Growth parameters derived for the size-based growth groups.",
                 longtable = TRUE, booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Growth parameters derived for the size-based growth groups.
Seed mass Growth rate (B) Normalization constant (b_{0}) Max. size (g) Size group
0.0001 0.25 4531446957 25.62341 Small (1g)
0.0003 0.25 5963719581 49.45742 Medium (2g)
0.0010 0.25 8058178821 118.80302 Big (5g)

3.3.13 Species temperature niche (Figure S@ref(fig:sim-ranges))

Species have a temperature niche, defined by temperature optimum and tolerance, which affects species performance as described in Mortality. To define these values, we searched the GBIF database for the species distribution, and the WordClim database for the mean annual temperatures (\(T_{loc_{\mu}}\)), minimal temperature in the coldest month (\(T_{loc_{min}}\)), and maximal temperature in the warmest month (\(T_{loc_{max}}\)) of the retrieved locations.

We used a combination of species name and the taxonomic key, to ensure all occurrence data was retrieved.

species <- spp_list %>%
  mutate(sp = str_replace_all(sp, pattern = "_", replacement = " "))%>%
  rename(species = sp)

keys <- sapply(species$species, function(x) name_suggest(x)$key[1], USE.NAMES=FALSE) # to check correctedness of the name                                                                                      
keys_names <- sapply(species$species, function(x) name_suggest(x)$key[1],
                     simplify = TRUE,
                     USE.NAMES = TRUE) # used to build final table 
species_keys <- as_tibble(matrix(unlist(keys_names), nrow = length(unlist(keys_names)),
                                 byrow = TRUE,
                                 dimnames = list(names(unlist(keys_names)), c("key"))),
                          rownames = "species")

# Search for the species taxonomic key
occurences_keys <- occ_search(taxonKey=keys,
                              return = "data",
                              fields = c("decimalLatitude", "decimalLongitude"))
save(occurences_keys,
     file = file.path("goetoccurenceGBIF_keys.rda"))

## unlist the occurences                                                                                      
occurences_keys = load(file.path("goetoccurenceGBIF_keys.rda"))                                               
occcoordinates_keys = data.frame()                                                                            
for(i in seq(occurences_keys)){
  if(typeof(occurences_keys[[i]]) == "list" &&
     length(occurences_keys[[i]]) > 0 &&
     !is.null(keys[[i]]))
    {
    if(i==1){
      occcoordinates_keys = data.frame(key = keys[[i]], occurences_keys[[i]])
      }else{
        occcoordinates_keys = bind_rows(occcoordinates_keys,
                                        data.frame(key = keys[[i]], occurences_keys[[i]]))
      }
  }
  }

# Search for species scientific name
occurences_scinames <- occ_search(scientificName=species$species, return = "data",
                                  fields=c("decimalLongitude", "decimalLatitude"))
save(occurences_scinames,
     file = file.path("goetoccurenceGBIF_scinames.rda"))
 
## unlist the occurences
occurences_scinames = load(file.path("goetoccurenceGBIF_scinames.rda"))
occcoordinates_scinames = data.frame()
for(i in seq(occurences_scinames)){
  if(typeof(occurences_scinames[[i]]) == "list" &&
     length(occurences_scinames[[i]]) > 0 &&
     !is.null(keys[[i]]))
    {
    if(i==1){
      occcoordinates_scinames = data.frame(key = keys[[i]], occurences_scinames[[i]])
      }else{
        occcoordinates_scinames = bind_rows(occcoordinates_scinames,
                                            data.frame(key = keys[[i]], occurences_scinames[[i]]))
      }
  }
}

## Combine both and check for replicates and discrepancies
missingGBIF <- bind_rows(occcoordinates_keys, occcoordinates_cinames)%>%unique()%>%
  left_join(species_keys,.)%>%
  filter(is.na(decimalLongitude))%>%
  filter(is.na(decimalLatitude))                               

allcoordinates <- bind_rows(occcoordinates_keys, occcoordinates_scinames)%>%
  unique()%>%
  left_join(species_keys, .)%>%
  filter(!is.na(decimalLongitude))%>%
  filter(!is.na(decimalLatitude))

raster::getData(name = "worldclim", download = TRUE,
                var = "bio",
                res = 2.5, ##0.5 did not have enough data
                lon = allcoordinates$decimalLongitude,
                lat = allcoordinates$decimalLatitude,
                path = file.path("worldclim_data", "bioclim"))

##Load data & Extract values
bioclimdata <- raster::getData(name = "worldclim", download = FALSE,
                               var = "bio",
                               res = 2.5,
                               lon = allcoordinates$decimalLongitude,
                               lat = allcoordinates$decimalLatitude,
                               path = file.path("worldclim_data/bioclim"))[[c(1,5,6,12,13,14)]]
names(bioclimdata) <- c("tmean", "tmax", "tmin", "prec", "pwet", "pdry")

## extract values
bioclimvars <- raster::extract(bioclimdata,
                               allcoordinates[c("decimalLongitude", "decimalLatitude")],
                               df = TRUE)%>%
    bind_cols(allcoordinates, .)

## Summarize
bioclimtable <- left_join(species_keys, bioclimvars)%>%
  left_join(species, .)%>%
  group_by(species)%>%
  summarise(tmean_mean = mean((tmean/10)+273.15, na.rm = TRUE),
            tmean_sd = sd((tmean/10)+273.15, na.rm = TRUE),
            tmax_max = max(tmax, na.rm = TRUE),
            tmin_min = min(tmin, na.rm = TRUE),
            prec_mean = mean(prec, na.rm = TRUE),
            pwet_max = mean(pwet, na.rm = TRUE),
            pdry_max = mean(pdry, na.rm = TRUE))

save(occcoordinates_keys,
     occcoordinates_scinames,
     allcoordinates,
     bioclimtable,
     bioclimdata,
     bioclimvars,
     file = file.path(traitsdir, "bioclim.RData"))

The species optimum temperature is the mean values of all mean values reported for its locations T_{opt}= \end{equation} where \(n_{loc}\) is the number of locations reported for the distribution of a species.

Following, it is necessary to choose the values that will represent the species range breath as the standard deviation of the Gaussian function (Eq. @ref(eq:fitness). In a Normal distribution, value of standard deviation approximates \(^1/_6\) of the range of the distribution it generates. Thus, we use calculate the species global temperature range \(max(T_{loc_{max}})-min(T_{loc_{min}})\) to calculate its niche breath as \[\begin{equation} T_{tol}=\frac{max(T_{loc_{max}})-min(T_{loc_{min}})}{6}, (\#eq:temp-range) \end{equation}\]

.

## Summarize temperature values available for the species from Göttingen
species <- spp_list %>%
  mutate(sp = str_replace_all(sp, pattern = "_", replacement = " "))%>%
  rename(species = sp)                                                                       
set.seed(100)
bioclim_edm <- left_join(species, bioclimvars)%>%
    ungroup() %>%
    group_by(species)%>%
    ## avoid warning from summarize because Festuca Pratensis is missing from rgbif
    filter(species != "Festuca pratensis")%>%
    summarise(tmean_mean = mean((tmean/10)+273.15, na.rm = TRUE),
              tmean_sd = sd((tmean/10)+273.15, na.rm = TRUE),
              tmin_min = min((tmin/10)+273.15, na.rm = TRUE),
              tmax_max = max((tmax/10)+273.15, na.rm = TRUE))%>%
    ungroup()%>%
    mutate(temprange = (tmax_max-tmin_min)/6)%>%
    ## mean value of geographical is the temperature optimum
    rename(temp_opt = tmean_mean,
           temp_tol = temprange) %>%
    ## prepare to merge with trait's list
    mutate(species = str_replace_all(species, pattern = " ", replacement = "_"))
write_csv(bioclim_edm, path = file.path(traitsdir, "bioclim_edm.csv"))

The minimal and maximal values generated match most of the observed values (Fig. @ref(fig:sim-ranges)). For comparison, we show the values generated when using the \(sd(T_{loc_{\mu})\). Table (@ref(tab:bioclim-edm-range) in Appendix 2 shows the simulated temperature range for each species.

bioclim_ranges.df <- bioclim_edm.df%>%
    rowwise()%>%
    mutate(simsd_min = min(rnorm(n=1000, mean=.$temp_opt, sd=.$tmean_sd)),
           simsd_max = max(rnorm(n=1000, mean=.$temp_opt, sd=.$tmean_sd)),
           simrange_min = min(rnorm(n=1000, mean=.$temp_opt, sd=.$temp_tol)),
           simrange_max = max(rnorm(n=1000, mean=.$temp_opt, sd=.$temp_tol))) %>%
    rename(observed_min = tmin_min, observed_max = tmax_max)%>%
    dplyr::select(species,
                  ## observed values
                  observed_min, observed_max,
                  ## values simulated with sd of mean temperatures
                  simsd_min, simsd_max,
                 ## values simulated with sd = range/6
                  simrange_min, simrange_max)
bioclim_ranges.df %>%
    pivot_longer(cols = c(observed_min, observed_max,
                          simsd_min, simsd_max,
                          simrange_min, simrange_max),
                 names_to = "source",
                 values_to = "temp") %>%
    separate(col = source, into = c("Source", "range"), sep = "_") %>%
    mutate(Source = recode_factor(Source,
                                  "observed" = "Observed",
                                  "simrange" = "Simulated from range",
                                  "simsd" = "Simulated from mean")) %>%
    ggplot(aes(x = temp))+
    labs(x = "Temperature (K)", y = "Density")+
    geom_density(aes(colour = Source, fill = Source, group = Source), alpha = .5)+
    scale_colour_viridis_d() +
    scale_fill_viridis_d()+
    theme(legend.position = "bottom")
Comparison of the minimal and maximal values retrieved from rgbif and WordClim (green), the values generated from the distribution based on the species global temperature range (purple), and the values generated from the distribution based on the mean value of the species distribution (purple)

Comparison of the minimal and maximal values retrieved from rgbif and WordClim (green), the values generated from the distribution based on the species global temperature range (purple), and the values generated from the distribution based on the mean value of the species distribution (purple)

3.3.14 Germination & Mortality

From the allometry study reported by @marbaalometric2007, we were able to derive a normalization constant for germination, \(b_{0}^{germ}\), and for mortality, \(b_0^{mort}\).

marba_T <- mean(marba$temp, na.rm = TRUE) # temperature values used in the allometric study by Marbà et al (2007)
b0germ <- (8e-4)/exp(-aE/(Boltz*marba_T)) # value derived from Marbà et al (2007)
b0mort <- 7*(9e-4)/exp(-aE/(Boltz*marba_T)) #value derived from Marbà et al (2007), multiplied to weekly basis

The germination and mortality rates generated by these constant are reported in the [#germiation-mortality-verification] section of the Implementation verification.

4 Implementation verification

Summary The model relies on a series of probability functions that have been parameterized to yield values inside biologically realistic ranges for dispersal kernels, as well as growth, mortality and germination rates. These values are verified in here.

4.1 Dispersal kernels

Verify the density distribution of distances generated by each dispersal kernel.

4.2 Biomass growth

To verify the growth curve yielded by our model, we simulate the growth curve of seeds belonging to each of the size group (small, medium,and large), during a 10 year period, for the temperature series used in [parameterization][#temperature-timeseries]. This simplified simulation includes the loss of biomass during winter dieback, which is not taken into account by the calculation of the S-shaped curve alone.

# temporal markers
ten_years = 10*52 # duration in weeks
spring_time = 13 # week of beginning of spring in temperate climate
minisim_time = seq(spring_time,spring_time+ten_years) # duration of verification realized growth

realized_growth = data.frame(time = minisim_time)

# simplified version of edm's biomass growth submodel
for(seedweight in c(growth_pars$seedmass)){
  # table 
  growth = data.frame(time = minisim_time, size = c(seedweight))
  # store values of the realized rate of growth
  B <- c()
  for(t in 2:length(minisim_time)){
    if(minisim_time[t]%%52 == 51){ # winter dieback on the first week
      growth[t, "size"] = (2/3)*growth[t-1, "size"]
    }else{
      pars <- filter(growth_pars, seedmass == seedweight)
      Temp <- tempseries_goettingen$meantemp_K[spring_time + t]
      Bg = pars$b0grow  * growth[t-1, "size"]^(-1/4) * exp(-aE/(Boltz*Temp))
      B[t-1] = Bg
      growth[t, "size"] = growth[t-1, "size"] + Bg*(pars$maxmass - growth[t-1, "size"])
    }
  }
  realized_growth <- inner_join(realized_growth, growth)%>%
  rename_at(vars(grep("size", names(.))), ~dplyr::select(filter(growth_pars, seedmass == seedweight), size_label)[[1]])
}

realgrowth_plot <- realized_growth%>%
    gather(key = "size", value = "mass", -time)%>%
    mutate(years = time/52) %>%
  ggplot(aes(x = years, y = mass, color = size, group = size))+
  geom_line()+
  scale_color_viridis(discrete = TRUE)+
  labs(y = "Weight (g)", color = "Size")+
  theme(axis.title.x = element_blank())

tempgrowth <- tempseries_goettingen%>%
    filter(week >= spring_time & week <= spring_time + ten_years) %>%
    mutate(years = week/52) %>%
    dplyr::select(years, meantemp) %>%
    ggplot(aes(x = years, y = meantemp))+
    geom_line(colour = "grey")+
    labs(x = "Time (years)", y = "Temperature (°C)")

plot_grid(realgrowth_plot + theme(legend.position = "bottom"), tempgrowth, 
          align = "v", ncol = 1,
          rel_heights = c(2,1),
          labels = c("A)", "B)"))
Simulated realized growth for each growth group, using the rates defined in Table ref(tab:growth-pars).

Simulated realized growth for each growth group, using the rates defined in Table ref(tab:growth-pars).

4.3 Germination and mortality rates

## data frame holding info on sizes
small <- c(0.0001,(2*10+10^(3/4))/2,2*10+10^(3/4))
medium <- c(0.0003,(2*20+20^(3/4))/2,2*20+20^(3/4))
large <- c(0.001,(2*50+50^(3/4))/2,2*50+50^(3/4))
stage <- as.factor(c("seed","juv","adult"))
stageweights <- data.frame(sp = rep(c("small","medium","large"), each =3),
                           stage = rep(stage,3),
                           weight = c(small,medium,large))
# Germination rate
germ_verif.plot <- filter(stageweights, stage == "seed")%>%
    mutate(max = b0germ*(weight^(-1/4))*exp(-aE/(Boltz*max(tempseries_goettingen$meantemp_K))),
           min = b0germ*(weight^(-1/4))*exp(-aE/(Boltz*min(tempseries_goettingen$meantemp_K)))) %>%
    gather(key = temp, value = rate, min:max) %>%
    mutate(probability = 1 - exp(-rate)) %>%
    mutate(sp = recode_factor(sp,
                              small = "Small",
                              medium = "Medium",
                              large = "Large")) %>%
    ggplot(aes(x = sp, y = probability, fill = as.factor(temp)))+
    geom_bar(stat = "identity", position = position_dodge(1))+
    scale_fill_viridis(discrete = TRUE) +
    labs(x = "Size group", y = "Probability", fill = "Temperature") +
    theme_minimal()+
    theme(axis.text.x = element_text(angle = 20),
          legend.position = "bottom")

## Mortality rate
mort_verif.plot <- data.frame(stage = rep(c("juvmin", "juvmax"),3),
                              weight = c(0.0001, (2*10+10^(3/4))*0.7, 
                                         0.0003, (2*20+20^(3/4))*0.7, 
                                         0.001, (2*50+50^(3/4))*0.7),
                              sp = rep(c("small", "medium", "large"),each = 2)) %>%
    rbind(stageweights,.) %>%
    filter(stage != "juv") %>%
    arrange(sp, stage) %>%
    mutate(min = b0mort*(weight^(-1/4))*exp(-aE/(Boltz*min(tempseries_goettingen$meantemp_K))),# max. temperature
           max = b0mort*(weight^(-1/4))*exp(-aE/(Boltz*max(tempseries_goettingen$meantemp_K)))) %>%
    gather(key = temp, value = rate, min:max) %>%
    mutate(probability = 1 - exp(-rate)) %>%
    mutate(sp = recode_factor(sp,
                              small = "Small",
                              medium = "Medium",
                              large = "Large")) %>%
    mutate(stage = recode_factor(stage,
                                 seed = "Seed",
                                 juvmin = "Juv. min.",
                                 juvmax = "Juv. max.",
                                 adult = "Adult")) %>%
    ggplot(aes(x = stage, y = probability, fill = as.factor(temp))) +
    geom_bar(stat = "identity", position = position_dodge(1)) +
    scale_fill_viridis(discrete = TRUE) +
    facet_wrap(~sp) +
    labs(x = "Stage") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 20),
          axis.title.y = element_blank()) 

plot_grid(plot_grid(germ_verif.plot + theme(legend.position = "none"),
                    mort_verif.plot + theme(legend.position = "none"),
                    nrow = 1, rel_widths = c(1,2), labels = c("A)", "B)")),
          cowplot::get_legend(germ_verif.plot),
          nrow = 2, rel_heights = c(6,1))
Germination (A) and mortality (B) rates yielded by the model, for the three biomass groups, at the minimum and maximal temperatures used for calibration. Mortality rates (B) are also distinguished among different stages, because they differ in biomass, and thus, in the resulting metabolic rate as well. In that regard, "Juv. min." refers to juveniles minimal biomass (the same as seeds), and "Juv. max.", to juveniles maximal biomass, which approaches 70% of the adult's maximal biomass, according to the Richards growth curve.

Germination (A) and mortality (B) rates yielded by the model, for the three biomass groups, at the minimum and maximal temperatures used for calibration. Mortality rates (B) are also distinguished among different stages, because they differ in biomass, and thus, in the resulting metabolic rate as well. In that regard, "Juv. min." refers to juveniles minimal biomass (the same as seeds), and "Juv. max.", to juveniles maximal biomass, which approaches 70% of the adult's maximal biomass, according to the Richards growth curve.

4.4 Fitness performance

Verifying limit values of fitness

# fitness = c()
# for(T in tempseries_goettingen$meantemp_K){
#   for(sp in 1:length(spptraits_unif)){
#     fitness = c(fitness,1*exp(-((T-spptraits_unif$temp_opt[sp])^2)/(2*(spptraits_unif$temp_tol[sp]^2))))
#   }
# }
# min(fitness)
# max(fitness)

5 Model output verification

Summary: In this section, we report how much model outputs match observations following the parameterization and inverted callibration reported in Data evaluation.

5.1 Species trait space

Being a trait-based model, one of the most important feats of the model is reproducing the trait space of the real-world communities the simulations are set up to reproduce. To verify it, we performed a Principal Component Analysis of the trait spaces of simulated communities with the trait space of species reported by Krauss et al. (2004) for 31 calcareous grasslands in the vicinity of the city of Göttingen (Germany). We first compared the trait space of simulated communities in the control scenarios and communities reported in patches of areas smaller than 484 m² and 961 m².

## calculate relative covers (sums are not always 100)
dens_rltv.df <- dens_raw.df %>%
    inner_join(., dplyr::select(denssumm_raw.df, c(fragment, Grosse))) %>%
    rename("size" = Grosse,
           "cover" =  Deckungsgrad) %>%
    mutate_at(vars(-c(fragment, size, cover)), function(x) x/.$cover) %>%
    arrange(size)

## gather trait information
traits_frags.df <- dens_rltv.df%>%
    pivot_longer(cols = -c(fragment, size, cover), #names(.)[2:193],
                 names_to = "species", values_to = "rltv_cover") %>%
    ## join spp traits
    inner_join(.,edm_traits) %>%
    mutate(kernel = case_when( 
               kernel == "long-short" ~ "short-long",
               kernel == "long-medium" ~ "medium-long",
               kernel == "medium-short" ~ "short-medium",
               TRUE ~ kernel)) %>%
    ## calculate mean values from input boundaries
    group_by(fragment, species) %>%
    mutate(span = mean(runif(n = 1000, min = span_min, max = span_max)),
           firstflower = mean(runif(n = 1000,
                                    min = firstflower_min, max = firstflower_max)),
           bankduration = mean(runif(n = 1000,
                                     min = bankduration_min, max = bankduration_max)),
           seednumber = mean(runif(n = 1000,
                                   min = seednumber_min, max = seednumber_max))) %>%
    dplyr::select(-c(compartsize, contains("max"), contains("min")))

traits_frags.pcadf <- traits_frags.df %>%
    filter(rltv_cover > 0) %>%
    ## summarize per fragment ~ replicate of model experiments
    group_by(fragment, size, kernel, clonality, pollen_vector, self_failoutcross) %>%
    summarize_at(vars(bankduration, firstflower, floron, floroff,
                      seedon, seedoff, seednumber, seedmass, self_proba, span),
                 ~weighted.mean(., rltv_cover)) %>%
    ungroup %>%
    ## summarize categorical variables in relative proportions per replicate
    mutate(clonality = as.character(clonality),
           self_failoutcross = as.character(self_failoutcross)) %>%
    pivot_longer(cols = c(kernel, clonality, pollen_vector, self_failoutcross),
                 names_to = "trait", values_to = "value") %>%    
    group_by(fragment, size, trait, value) %>%
    unique %>%
    mutate(n = n()) %>%
    ungroup %>%
    group_by(fragment, size, trait) %>%
    mutate(freq = n/sum(n)) %>%
    ungroup %>%
    dplyr::select(-n) %>%
    rowwise() %>%
    mutate(trait_value = paste(trait, value, sep = "_")) %>%
    dplyr::select(-c(trait, value)) %>%
    pivot_wider(names_from = trait_value, values_from = freq) %>%
    mutate_at(vars(contains("kernel"), contains("clonality"), contains("pollen_vector"),
                   contains("self_failoutcross")),
              funs(ifelse(is.na(.), 0, .))) %>%
    mutate(origin = "data")

5.1.1 Simulated and real-world trait spaces (Figures @ref(fig:frags-pcarep)-@ref(fig:large-frags-pcarep))

frags.pcadf <- traits_frags.pcadf %>%
    filter(size <= 1000) %>% ## includes both fragments sizes
    bind_rows(scen_wgtmean.df %>%
              filter(disturbance == "Control", initial_area == 500, year == 160) %>%
              dplyr::select(-c(year, rplkt, disturbance, intensity, initial_area)) %>%
              mutate(origin = "simulations"))

frags.pcalist <- frags.pcadf %>%
    dplyr::select(-c(fragment, size, origin)) %>%
    get_pcaoutputs(.,traitnames.dict)
## Warning in PCA(tab4pca, scale.unit = TRUE, graph = FALSE): Missing values are
## imputed by the mean of the variable: you should use the imputePCA function of
## the missMDA package
(frags.biplot <- fviz_pca_biplot(frags.pcalist$pca,
             geom.ind = "point",
             col.ind = as.character(frags.pcadf$origin),
             addEllipses = TRUE,
             col.var = "grey27",
             ## select 12 most contributing variables to show
             select.var = list(contrib = 12),
             repel = TRUE,
             title = NULL,
             legend.title = "Trait space") +
    scale_colour_manual(values = rev(viridis(n = 2, option = "D")),
                        aesthetics = c("colour", "fill")) +
    theme(legend.position = "bottom"))
Analysis of principal components of the trait space of all communities simulated (dark purple) and the trait space estimated for real-world communities(yellow). Out of the 24 variables used to define the trait space, only the 12 most contributing ones were included, to facilitate visualization.

Analysis of principal components of the trait space of all communities simulated (dark purple) and the trait space estimated for real-world communities(yellow). Out of the 24 variables used to define the trait space, only the 12 most contributing ones were included, to facilitate visualization.

plot_grid(frags.pcalist$corrvars.plot + theme(axis.text = element_text(size = 11),
                                              axis.title = element_blank()),
          frags.pcalist$scree.plot + theme(plot.title = element_blank()),
          frags.pcalist$contribvars.barplot + theme(axis.text = element_text(size = 11),
                                                    plot.title = element_blank()),
          ncol = 1, labels = c("A)", "B)", "C)"))
Representation of variables in the analysis of principal components (PCA) of the trait space of simulated communities (484 m² and 961 m²) and the trait space estimated for real-world communities (smaller than 1000m²): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

Representation of variables in the analysis of principal components (PCA) of the trait space of simulated communities (484 m² and 961 m²) and the trait space estimated for real-world communities (smaller than 1000m²): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

smallfrags.pcadf <- traits_frags.pcadf %>%
    filter(size <= 500) %>%
    bind_rows(scen_wgtmean.df %>%
              filter(disturbance == "Control", initial_area == 500, year == 160) %>%
              dplyr::select(-c(year, rplkt, disturbance, intensity, initial_area)) %>%
              mutate(origin = "simulations"))

smallfrags.pcalist <- smallfrags.pcadf %>%
    dplyr::select(-c(fragment, size, origin)) %>%
    get_pcaoutputs(.,traitnames.dict)
## Warning in PCA(tab4pca, scale.unit = TRUE, graph = FALSE): Missing values are
## imputed by the mean of the variable: you should use the imputePCA function of
## the missMDA package
(smallfrags.biplot <- fviz_pca_biplot(smallfrags.pcalist$pca,
             geom.ind = "point",
             col.ind = as.character(smallfrags.pcadf$origin),
             addEllipses = TRUE,
             col.var = "grey27",
             ## select 12 most contributing variables to show
             select.var = list(contrib = 12),
             repel = TRUE,
             title = NULL,
             legend.title = "Trait space") +
    scale_colour_manual(values = rev(viridis(n = 2, option = "D")),
                        aesthetics = c("colour", "fill")) +
    theme(legend.position = "bottom"))
Analysis of principal components of the trait space of a community simulated in a landscape of 484 m² (dark purple) and the trait space estimated for real-world communities(yellow). Out of the 24 variables used to define the trait space, only the 12 most contributing ones were included, to facilitate visualization.

Analysis of principal components of the trait space of a community simulated in a landscape of 484 m² (dark purple) and the trait space estimated for real-world communities(yellow). Out of the 24 variables used to define the trait space, only the 12 most contributing ones were included, to facilitate visualization.

plot_grid(smallfrags.pcalist$corrvars.plot + theme(axis.text = element_text(size = 11),
                                                   axis.title = element_blank()),
          smallfrags.pcalist$scree.plot + theme(plot.title = element_blank()),
          smallfrags.pcalist$contribvars.barplot +
          theme(axis.text = element_text(size = 11),
                plot.title = element_blank()),
          ncol = 1, labels = c("A)", "B)", "C)"))
Representation of variables in the analysis of principal components (PCA) of the trait space of simulated small communities (484 m²) and the trait space estimated for real-world communities (smaller than 500 m²): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

Representation of variables in the analysis of principal components (PCA) of the trait space of simulated small communities (484 m²) and the trait space estimated for real-world communities (smaller than 500 m²): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

largefrags.pcadf <- traits_frags.pcadf %>%
    filter(size > 500, size <= 1000) %>%
    bind_rows(scen_wgtmean.df %>%
              filter(disturbance == "Control", initial_area == 1000, year == 160) %>%
              dplyr::select(-c(year, rplkt, disturbance, intensity, initial_area)) %>%
              mutate(origin = "simulations"))

largefrags.pcalist <- largefrags.pcadf %>%
    dplyr::select(-c(fragment, size, origin)) %>%
    get_pcaoutputs(.,traitnames.dict)
## Warning in PCA(tab4pca, scale.unit = TRUE, graph = FALSE): Missing values are
## imputed by the mean of the variable: you should use the imputePCA function of
## the missMDA package
(largefrags.biplot <- fviz_pca_biplot(largefrags.pcalist$pca,
             geom.ind = "point",
             col.ind = as.character(largefrags.pcadf$origin),
             addEllipses = TRUE,
             col.var = "grey27",
             ## select 12 most contributing variables to show
             select.var = list(contrib = 12),
             repel = TRUE,
             title = NULL,
             legend.title = "Trait space") +
    scale_colour_manual(values = rev(viridis(n = 2, option = "D")),
                        aesthetics = c("colour", "fill")) +
    theme(legend.position = "bottom"))
Analysis of principal components of the trait space of a community simulated in a landscape of 961 m² (dark purple) and the trait space estimated for real-world communities(yellow). Out of the 24 variables used to define the trait space, only the 12 most contributing ones were included, to facilitate visualization.

Analysis of principal components of the trait space of a community simulated in a landscape of 961 m² (dark purple) and the trait space estimated for real-world communities(yellow). Out of the 24 variables used to define the trait space, only the 12 most contributing ones were included, to facilitate visualization.

plot_grid(largefrags.pcalist$corrvars.plot + theme(axis.text = element_text(size = 11),
                                                   axis.title = element_blank()),
          largefrags.pcalist$scree.plot + theme(plot.title = element_blank()),
          largefrags.pcalist$contribvars.barplot +
          theme(axis.text = element_text(size = 11),
                plot.title = element_blank()),
          ncol = 1, labels = c("A)", "B)", "C)"))
Representation of variables in the analysis of principal components (PCA) of the trait space of simulated communities (961 m²) and the trait space estimated for real-world communities (bigger than 500 m² and smaller than 1000 m²): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

Representation of variables in the analysis of principal components (PCA) of the trait space of simulated communities (961 m²) and the trait space estimated for real-world communities (bigger than 500 m² and smaller than 1000 m²): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

5.1.2 Effect of habitat area decrease on trait space (Figures @ref(fig:data-area-pca)-@ref(fig:areapollloss-pcarep))

empirical_frags.pcadf <- traits_frags.pcadf %>%
    filter(size %in% c(quantile(traits_frags.pcadf$size,
                                probs = c(0.25, 0.5, 0.75, 0.9))[[1]],
                       quantile(traits_frags.pcadf$size,
                                probs = c(0.25, 0.5, 0.75, 0.9))[[2]],
                       quantile(traits_frags.pcadf$size,
                                probs = c(0.25, 0.5, 0.75, 0.9))[[3]],
                       quantile(traits_frags.pcadf$size,
                                probs = c(0.25, 0.5, 0.75, 0.9))[[4]]))

empirical_fragsareas.pcalist <- empirical_frags.pcadf %>%
    dplyr::select(-c(fragment, size, origin)) %>%
    get_pcaoutputs(.,traitnames.dict)

(fragsarea.biplot <- fviz_pca_biplot(empirical_fragsareas.pcalist$pca,
                                     geom.ind = "none",
                                     col.ind = empirical_frags.pcadf$size,
                                     addEllipses = TRUE,
                                     col.var = "chocolate3",
                                     ## select 12 most contributing variables to show
                                     select.var = list(contrib = 12),
                                     repel = TRUE,
                                     title = NULL,
                                     legend.title = "Size (m²)") +
     scale_colour_manual(values = rev(viridis(n = 4, option = "D")),
                         aesthetics = c("colour", "fill")))
Analysis of principal components of A) the trait space estimated for empirical communities sampled in calcareous grasslands of sizes falling into the 25th, 50th, 75th, 90th percentiles of the areas reported in Krauss et al. (2004).

Analysis of principal components of A) the trait space estimated for empirical communities sampled in calcareous grasslands of sizes falling into the 25th, 50th, 75th, 90th percentiles of the areas reported in Krauss et al. (2004).

plot_grid(empirical_fragsareas.pcalist$corrvars.plot +
          theme(axis.text = element_text(size = 11),
                axis.title = element_blank()),
          empirical_fragsareas.pcalist$scree.plot +
          theme(plot.title = element_blank()),
          empirical_fragsareas.pcalist$contribvars.barplot +
          theme(axis.text = element_text(size = 11),
                plot.title = element_blank()),
          ncol = 1, labels = c("A)", "B)", "C)"))
Representation of variables in the analysis of principal components (PCA) of the trait space estimated for empirical communities sampled in calcareous grasslands of sizes falling into the 25th, 50th, 75th, 90th percentiles of the areas reported in Krauss et al. (2004): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

Representation of variables in the analysis of principal components (PCA) of the trait space estimated for empirical communities sampled in calcareous grasslands of sizes falling into the 25th, 50th, 75th, 90th percentiles of the areas reported in Krauss et al. (2004): A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

sims_area.pcadf <- scen_wgtmean.df %>%
    filter(disturbance == "Area loss") %>%
    filter(year == 160)

sims_areas.pcalist <- sims_area.pcadf %>%
    dplyr::select(-c(year, rplkt, disturbance, intensity, initial_area)) %>%
    get_pcaoutputs(.,traitnames.dict)

(sims_areas.biplot <- fviz_pca_biplot(sims_areas.pcalist$pca,
             geom.ind = "none",
             col.ind = sims_area.pcadf$intensity,
             addEllipses = TRUE,
             col.var = "chocolate3",
             ## select 12 most contributing variables to show
             select.var = list(contrib = 12),
             repel = TRUE,
             title = NULL,
             legend.title = "Intensity of loss (%)") +
    scale_colour_manual(values = viridis(n = 4, option = "D"),
                        aesthetics = c("colour", "fill")) +
    theme(legend.position = "bottom"))
Analysis of principal components of A) the trait space estimated for the surviving communities in simulated communities under 25%, 50%, 75%, and 90% of loss of habitat area.

Analysis of principal components of A) the trait space estimated for the surviving communities in simulated communities under 25%, 50%, 75%, and 90% of loss of habitat area.

plot_grid(sims_areas.pcalist$corrvars.plot + theme(axis.text = element_text(size = 11),
                                                   axis.title = element_blank()),
          sims_areas.pcalist$scree.plot + theme(plot.title = element_blank()),
          sims_areas.pcalist$contribvars.barplot +
          theme(axis.text = element_text(size = 11),
                plot.title = element_blank()),
          ncol = 1, labels = c("A)", "B)", "C)"))
Representation of variables in the analysis of principal components (PCA) of the trait space estimated for surviving communities in simulated communities under 25%, 50%, 75%, and 90% of loss of habitat area: A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

Representation of variables in the analysis of principal components (PCA) of the trait space estimated for surviving communities in simulated communities under 25%, 50%, 75%, and 90% of loss of habitat area: A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

sims_areapoll.pcadf <- scen_wgtmean.df %>%
    filter(disturbance == "Area and pollination loss") %>%
    filter(year == 160)
sims_areaspoll.pcalist <- sims_areapoll.pcadf %>%
    dplyr::select(-c(year, rplkt, disturbance, intensity, initial_area)) %>%
    get_pcaoutputs(.,traitnames.dict)

sims_areaspoll.biplot <- fviz_pca_biplot(sims_areaspoll.pcalist$pca,
             geom.ind = "none",
             col.ind = sims_areapoll.pcadf$intensity,
             addEllipses = TRUE,
             col.var = "chocolate3",
             ## select 12 most contributing variables to show
             select.var = list(contrib = 12),
             repel = TRUE,
             title = NULL,
             legend.title = "Intensity of loss (%)") +
    scale_colour_manual(values = viridis(n = 4, option = "D"),
                        aesthetics = c("colour", "fill")) +
    theme(legend.position = "bottom")
plot_grid(sims_areaspoll.pcalist$corrvars.plot + theme(axis.text = element_text(size = 11),
                                                       axis.title = element_blank()),
          sims_areaspoll.pcalist$scree.plot + theme(plot.title = element_blank()),
          sims_areaspoll.pcalist$contribvars.barplot +
          theme(axis.text = element_text(size = 11),
                plot.title = element_blank()),
          ncol = 1, labels = c("A)", "B)", "C)"))
Representation of variables in the analysis of principal components (PCA) of the trait space estimated for surviving communities in simulated communities under 25%, 50%, 75%, and 90% of loss of habitat area and pollination services: A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

Representation of variables in the analysis of principal components (PCA) of the trait space estimated for surviving communities in simulated communities under 25%, 50%, 75%, and 90% of loss of habitat area and pollination services: A) Correlation between traits and the principal components defined by the PCA, B) scree plot showing percentage of variance explained by each principal component defined by the PCA, and C) percentage of contribution of each trait to the first two principal components.

5.2 Species rank abundances

5.3 Species-area accumulation curve

5.4 Species composition

6 Appendix 1: Built-in raster generator

Raster files must always represent the same area as the total initial landscape area.

7 Appendix 2: Trait values available in databases (Table @ref(tab:traits-databases))

traitsleda_incomplete_unif %>%
    rename("species" = "sp") %>%
    left_join(., flowerphenology_edm) %>%
    left_join(., pollination) %>%
    inner_join(., dplyr::select(bioclim_edm.df, c(species, temp_opt,temp_tol))) %>%
    mk_itspp() %>%
    rename("Species" = "species",
           "Kernel" = "kernel",
           "Clonality" = "clonality",
           "Pollen vector" = "pollen_vector",
           "Prob. selfing" = "self_proba",
           "Selfing" = "selfing_at_failoutcross",
           "Seed mass" = "seedmass",
           "Max. adult mass" = "maxmass",
           "Prob. selfing" = "self_proba",
           "Min. life span" = "span_min",
           "Max. life span" = "span_max",
           "Min. age 1st flower" = "firstflower_min",
           "Max. age 1st flower" = "firstflower_max",
           "Max. seed bank" = "bankduration_max",
           "Min. seed bank" = "bankduration_min",
           "Min. seeds" = "seednumber_min",
           "Max. seeds" = "seednumber_max",
           "Begin flowering" = "floron",
           "End flowering" = "floroff",
           "Temp. optimum" = "temp_opt",
           "Temp. tolerance" = "temp_tol") %>%
    knitr::kable(caption = "Trait valeus filtered from the LEDA and BiolFlor databases, for plant species listed for fragments of calcareous grasslands around the city of Göttingen.",
               longtable = TRUE, booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  scroll_box(width = "100%", height = "700px")
Trait valeus filtered from the LEDA and BiolFlor databases, for plant species listed for fragments of calcareous grasslands around the city of Göttingen.
Species Min. seeds Max. seeds Kernel Seed mass Max. adult mass Min. life span Max. life span Min. age 1st flower Max. age 1st flower Min. seed bank Max. seed bank Clonality Begin flowering End flowering Pollen vector Prob. selfing Selfing Temp. optimum Temp. tolerance
Achillea millefolium 190.0 7200.0 any 0.0003 49.45742 1560 1560 18.77277 105.59588 NA NA TRUE 23 44 insects 0.000 FALSE 285.6251 9.566667
Acinos arvensis 342.0 342.0 long-short 0.0010 118.80302 1560 1560 18.77277 105.59588 3.875541 385.780391 TRUE 23 40 insects 0.000 FALSE 278.8466 7.666667
Actaea spicata 108.0 1900.0 long 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 3.875541 TRUE 18 26 insects 0.000 TRUE 278.4126 7.933333
Aegopodium podagraria 46.5 10700.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 385.780391 TRUE 23 31 insects 0.000 FALSE 280.6411 9.116667
Agrimonia eupatoria 66.0 66.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 149.458251 TRUE 23 40 insects 0.950 FALSE 280.4205 8.950000
Ajuga genevensis 221.0 221.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 385.780391 TRUE 14 26 insects 0.000 TRUE 281.5398 8.000000
Ajuga reptans 36.0 105.0 short-medium 0.0010 118.80302 1560 2600 105.59588 105.59588 NA NA TRUE 18 35 insects 0.000 TRUE 283.3404 8.083333
Allium schoenoprasum 4149.0 4149.0 short-long 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 35 insects 0.000 TRUE 280.3545 9.183333
Alopecurus pratensis 414.0 414.0 long-short 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 26 wind 0.000 FALSE 280.7221 8.766667
Anchusa arvensis 128.0 700.0 long-medium 0.0010 118.80302 52 104 18.77277 18.77277 3.875541 149.458251 FALSE 18 40 insects 0.000 TRUE 281.2234 9.566667
Antennaria dioica 280.0 280.0 long-short 0.0001 25.62341 1560 2600 105.59588 105.59588 3.875541 3.875541 TRUE 18 26 insects 0.000 FALSE 278.2855 8.700000
Anthoxanthum odoratum 108.0 1038.5 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 26 insects 0.000 FALSE 281.2262 7.800000
Anthriscus sylvestris 132.1 10000.0 long-short 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 35 insects 0.000 FALSE 281.5486 7.483333
Anthyllis vulneraria 30.0 194.0 long 0.0010 118.80302 52 1560 26.00000 26.00000 3.875541 385.780391 TRUE 18 35 insects 0.500 FALSE 280.7263 8.266667
Arabis hirsuta 750.0 750.0 long-short 0.0001 25.62341 1560 1560 105.59588 105.59588 NA NA TRUE 18 31 insects 0.500 FALSE 280.1182 8.333333
Arrhenatherum elatius 10.0 10.0 long-short 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 23 44 wind 0.050 FALSE 281.2127 7.400000
Artemisia vulgaris 200000.0 500000.0 any 0.0003 49.45742 1560 1560 18.77277 105.59588 NA NA TRUE 27 49 insects 0.000 FALSE 283.0275 9.566667
Astragalus glycyphyllos 10315.0 10315.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 31 insects 0.000 FALSE 279.8322 8.416667
Avenula pubescens 4000.0 4000.0 short-long 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 26 wind 0.000 FALSE 279.8673 7.916667
Brachypodium pinnatum 87.0 87.0 short-long 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 23 31 wind 0.000 FALSE 281.0725 9.000000
Bellis perennis 1288.0 1288.0 any 0.0003 49.45742 1560 1560 105.59588 105.59588 NA NA TRUE 0 49 insects 0.500 FALSE 283.4846 7.416667
Briza media 179.0 7308.0 short-long 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 26 wind 0.000 FALSE 279.9232 8.733333
Bromus erectus NA NA long 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 44 wind 0.000 FALSE 281.7318 6.133333
Bromus hordeaceus NA NA long 0.0010 118.80302 52 104 18.77277 18.77277 NA NA TRUE 18 35 wind 0.950 FALSE 282.5224 8.016667
Calystegia sepium NA NA long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 385.780391 TRUE 23 40 insects 0.000 TRUE 282.3955 9.350000
Campanula glomerata NA NA short-long 0.0003 49.45742 52 1560 26.00000 26.00000 3.875541 149.458251 TRUE 23 40 insects 0.000 TRUE 277.7940 11.166667
Campanula persicifolia NA NA long-short 0.0001 25.62341 104 1560 18.77277 18.77277 NA NA TRUE 23 40 insects 0.000 FALSE 279.8406 7.600000
Campanula rotundifolia NA NA long-short 0.0001 25.62341 1560 1560 18.77277 18.77277 NA NA TRUE 23 44 insects 0.000 FALSE 279.3996 9.083333
Campanula rapunculoides NA NA any 0.0003 49.45742 1560 1560 18.77277 105.59588 NA NA TRUE 23 40 insects 0.000 FALSE 279.5601 9.683333
Cardaminopsis arenosa NA NA long 0.0003 49.45742 52 1560 18.77277 18.77277 149.458251 149.458251 TRUE 14 35 insects 0.000 FALSE 280.3846 7.900000
Carduus crispus NA NA any 0.0010 118.80302 104 104 52.00000 52.00000 3.875541 385.780391 FALSE 27 40 insects 0.000 FALSE 279.9315 8.850000
Carex caryophyllea NA NA medium 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 14 22 wind 0.000 FALSE 280.5223 8.466667
Carex flacca NA NA any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 31 wind 0.000 FALSE 281.1753 7.533333
Carex leporina NA NA short NA NA 1560 1560 NA NA NA NA FALSE 23 31 wind 0.000 FALSE 279.1100 7.100000
Carex ornithopoda NA NA any 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 18 22 wind 0.000 FALSE 278.5075 7.466667
Carlina vulgaris NA NA any NA NA 52 1560 18.77277 18.77277 NA NA TRUE 27 40 insects 0.000 TRUE 280.7739 6.816667
Centaurea jacea NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA FALSE 23 49 insects 0.000 FALSE 280.4447 8.633333
Centaurea scabiosa NA NA any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 27 35 insects 0.000 FALSE 279.9491 9.300000
Centaurium erythraea NA NA short-long 0.0001 25.62341 52 1560 NA NA NA NA FALSE 27 35 insects 0.950 FALSE 284.0660 9.666667
Cephalanthera rubra NA NA short NA NA 1560 1560 NA NA NA NA TRUE 23 31 insects 0.500 FALSE 281.1061 8.700000
Cerastium arvense NA NA long-short 0.0003 49.45742 1560 2600 18.77277 105.59588 NA NA TRUE 14 31 insects 0.000 TRUE 281.0167 9.916667
Cerastium holosteoides NA NA short NA NA 1560 1560 NA NA NA NA FALSE 9 26 insects 0.000 TRUE 281.2091 7.183333
Cerastium tomentosum NA NA long-short 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 18 31 insects 0.000 TRUE 281.0699 7.233333
Cerinthe minor NA NA short-long NA NA 104 1560 18.77277 18.77277 NA NA TRUE 18 31 insects 0.000 TRUE 280.6468 7.683333
Chaerophyllum hirsutum NA NA short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 26 insects 0.000 FALSE 280.2983 6.316667
Chaerophyllum temulum NA NA short-long 0.0010 118.80302 52 104 NA NA 3.875541 149.458251 FALSE 18 31 insects 0.000 FALSE 282.3427 6.933333
Cichorium intybus NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 149.458251 TRUE 27 44 insects 0.000 FALSE 283.5332 9.600000
Cirsium acaule NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 27 40 insects 0.000 FALSE 280.5920 8.450000
Cirsium arvense NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 27 40 insects 0.000 FALSE 281.8333 9.083333
Cirsium oleraceum NA NA any 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 23 40 insects 0.000 FALSE 280.1936 8.366667
Cirsium tuberosum NA NA any NA NA 1560 1560 18.77277 18.77277 3.875541 3.875541 TRUE 27 35 insects 0.000 FALSE 282.1654 6.016667
Cirsium vulgare NA NA any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA FALSE 23 40 insects 0.000 FALSE 283.7613 8.616667
Clinopodium vulgare NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 27 40 insects 0.000 FALSE 280.3037 9.183333
Convolvulus arvensis NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 40 insects 0.500 FALSE 284.1778 10.683333
Crepis biennis NA NA any 0.0010 118.80302 104 104 18.77277 18.77277 NA NA FALSE 18 35 insects 0.000 TRUE 281.6483 6.333333
Cruciata laevipes NA NA long 0.0010 118.80302 52 1560 18.77277 18.77277 3.875541 3.875541 TRUE 14 26 insects 0.000 FALSE 282.3399 9.150000
Cynosurus cristatus NA NA any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 31 wind 0.500 FALSE 281.0622 7.016667
Dactylis glomerata NA NA long-short 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 31 wind 0.050 TRUE 282.0465 8.083333
Daucus carota NA NA any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 40 insects 0.050 TRUE 285.5320 8.650000
Echium vulgare NA NA any 0.0010 118.80302 104 104 18.77277 18.77277 3.875541 385.780391 FALSE 18 31 insects 0.000 FALSE 282.0942 9.166667
Elytrigia repens NA NA any NA NA 1560 1560 NA NA NA NA FALSE 23 35 wind 0.000 FALSE 279.0669 6.900000
Epilobium angustifolium NA NA any 0.0001 25.62341 1560 1560 18.77277 18.77277 NA NA TRUE 27 35 insects 0.050 FALSE 279.1531 10.716667
Epilobium montanum NA NA any 0.0003 49.45742 1560 1560 18.77277 18.77277 NA NA TRUE 23 40 insects 0.950 FALSE 279.5080 7.866667
Equisetum arvense NA NA any 0.0001 25.62341 1560 1560 NA NA NA NA FALSE 9 17 wind 0.500 FALSE 281.6585 10.416667
Euphorbia cyparissias NA NA any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 14 22 insects 0.050 FALSE 282.5568 7.733333
Euphrasia officinalis NA NA any 0.0003 49.45742 52 52 18.77277 18.77277 3.875541 149.458251 FALSE 18 44 insects 0.000 TRUE 279.2117 8.166667
Falcaria vulgaris 2000.0 2000.0 any 0.0010 118.80302 52 1560 26.00000 26.00000 3.875541 3.875541 TRUE 27 40 insects 0.000 FALSE 281.5397 8.166667
Festuca ovina 847.0 847.0 long-short 0.0010 118.80302 104 1560 52.00000 52.00000 NA NA TRUE 18 35 wind 0.000 FALSE 279.3919 7.416667
Festuca rubra 465.0 465.0 any 0.0010 118.80302 104 1560 NA NA NA NA TRUE 23 31 wind 0.000 FALSE 279.8448 7.500000
Filipendula vulgaris 113.0 439.3 short-long 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 3.875541 TRUE 23 31 insects 0.000 FALSE 280.5264 8.516667
Fragaria vesca 225.0 341.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 26 insects 0.000 TRUE 282.1414 9.266667
Fragaria viridis NA NA short-long 0.0010 118.80302 1560 1560 310.48690 310.48690 NA NA TRUE 18 26 insects 0.000 FALSE 278.8633 9.366667
Galeopsis ladanum 300.0 300.0 long-medium 0.0010 118.80302 52 52 18.77277 18.77277 NA NA FALSE 23 44 insects 0.000 TRUE 279.7941 9.166667
Galium aparine 31.0 1000.0 long 0.0010 118.80302 52 104 18.77277 18.77277 NA NA FALSE 23 44 insects 0.950 FALSE 287.8325 8.166667
Galium mollugo 1734.0 20000.0 long-short 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 18 31 insects 0.050 FALSE 280.4929 9.533333
Galium pumilum NA NA short-long 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 27 40 insects 0.050 FALSE 281.4022 6.766667
Galium verum 12.6 104.1 short-long 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 40 wind-insects 0.025 FALSE 280.0749 9.583333
Genista tinctoria NA NA short-long 0.0010 118.80302 1560 1560 NA NA 3.875541 3.875541 TRUE 23 35 insects 0.000 FALSE 280.7595 8.600000
Gentianella ciliata 670.0 670.0 short 0.0003 49.45742 104 1560 52.00000 52.00000 3.875541 3.875541 TRUE 32 44 insects 0.050 FALSE 280.3280 6.650000
Gentianella germanica 160.0 594.0 short 0.0003 49.45742 52 104 18.77277 18.77277 NA NA FALSE 23 44 insects 0.000 TRUE 280.6513 6.450000
Geranium dissectum 95.0 1000.0 long-short 0.0010 118.80302 52 104 18.77277 18.77277 NA NA FALSE 18 35 insects 0.000 TRUE 285.2910 7.200000
Geranium molle 81.0 100.0 long-short 0.0010 118.80302 52 104 18.77277 18.77277 3.875541 385.780391 FALSE 18 44 insects 0.950 FALSE 284.3925 7.650000
Geranium pratense 3.0 3.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 35 insects 0.000 FALSE 279.9600 8.816667
Geranium pusillum 300.0 750.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA FALSE 18 44 insects 0.950 FALSE 280.8284 8.250000
Geranium robertianum 30.0 300.0 any 0.0010 118.80302 52 104 18.77277 18.77277 NA NA FALSE 18 44 insects 0.950 FALSE 282.1439 7.633333
Geum urbanum 172.0 324.5 long 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 44 insects 0.950 FALSE 281.6276 8.733333
Gymnadenia conopsea 31699.0 31699.0 short 0.0001 25.62341 1560 1560 105.59588 105.59588 3.875541 3.875541 TRUE 18 35 insects 0.000 FALSE 278.6253 8.683333
Helianthemum nummularium 243.0 243.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 44 insects 0.000 TRUE 280.1858 6.466667
Heracleum sphondylium 850.0 10005.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 40 insects 0.000 TRUE 283.5358 9.316667
Hieracium caespitosum 612.0 612.0 any 0.0003 49.45742 1560 1560 18.77277 18.77277 3.875541 3.875541 TRUE 18 35 insects 0.050 FALSE 281.5453 9.933333
Hieracium lachenalii NA NA short NA NA 1560 1560 NA NA NA NA FALSE 23 35 insects 0.050 FALSE 280.7973 7.550000
Hieracium murorum NA NA any 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 18 35 insects 0.050 FALSE 280.0843 7.833333
Hieracium pilosella 21.0 75.0 any 0.0003 49.45742 1560 1560 18.77277 105.59588 NA NA TRUE 18 44 insects 0.050 FALSE 282.3518 5.733333
Hippocrepis comosa 120.0 120.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 31 insects 0.000 FALSE 281.8446 6.633333
Holcus lanatus 177000.0 177000.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 35 wind 0.500 FALSE 282.6703 6.850000
Hypericum perforatum 3036.0 33000.0 any 0.0001 25.62341 1560 1560 105.59588 105.59588 NA NA TRUE 27 35 insects 0.050 FALSE 282.1337 9.766667
Inula conyzae NA NA any NA NA 1560 1560 NA NA NA NA FALSE 23 44 insects 0.000 FALSE 282.6778 5.883333
Knautia arvensis 66.0 2000.0 any 0.0010 118.80302 1560 1560 105.59588 310.48690 NA NA TRUE 27 35 insects 0.000 FALSE 280.4889 8.700000
Koeleria pyramidata 209.5 209.5 long-short 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 23 31 wind 0.000 FALSE 281.7134 6.966667
Lathyrus pratensis 38.0 300.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 35 insects 0.000 FALSE 279.4419 8.583333
Leontodon hispidus 66.0 71.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 44 insects 0.000 FALSE 280.8981 7.983333
Leucanthemum vulgare 66.1 26000.0 any 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 23 44 insects 0.000 TRUE 282.6034 8.516667
Linum catharticum 11.4 183.0 any 0.0003 49.45742 52 1560 18.77277 18.77277 NA NA TRUE 23 31 insects 0.950 FALSE 280.3002 6.500000
Listera ovata 21000.0 150000.0 short NA NA 1560 1560 105.59588 310.48690 3.875541 3.875541 TRUE 18 26 insects 0.050 FALSE 280.2161 7.016667
Lolium perenne NA NA any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 18 44 wind 0.000 FALSE 286.1423 9.400000
Lotus corniculatus 345.0 18000.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 35 insects 0.000 FALSE 281.5991 8.900000
Medicago falcata NA NA any NA NA 1560 1560 NA NA NA NA FALSE 23 40 insects 0.000 FALSE 278.8608 11.066667
Medicago lupulina 100.0 6600.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 18 44 insects 0.500 FALSE 287.8328 8.783333
Melampyrum arvense 10.0 40.0 long-medium NA NA 52 104 18.77277 18.77277 3.875541 149.458251 FALSE 23 40 insects 0.000 FALSE 281.3895 8.366667
Melampyrum nemorosum 12.0 438.0 medium 0.0010 118.80302 52 52 18.77277 18.77277 3.875541 3.875541 FALSE 18 40 insects 0.000 TRUE 279.1104 8.633333
Melampyrum sylvaticum 9.4 76.0 medium-long 0.0010 118.80302 52 52 18.77277 18.77277 3.875541 3.875541 FALSE 23 40 insects 0.000 TRUE 278.0563 7.166667
Melilotus alba 4287.5 350000.0 long-short 0.0010 118.80302 52 104 26.00000 26.00000 NA NA FALSE 23 40 insects 0.000 TRUE 283.4032 9.966667
Melilotus officinalis 100.0 100000.0 any 0.0010 118.80302 52 104 18.77277 18.77277 NA NA FALSE 14 40 insects 0.000 TRUE 282.2428 10.850000
Mentha arvensis 19.5 200.0 long 0.0003 49.45742 1560 1560 105.59588 105.59588 NA NA TRUE 23 44 insects 0.000 FALSE 278.4783 10.400000
Mentha verticillata NA NA any NA NA 1560 1560 NA NA NA NA FALSE 27 35 insects 0.000 FALSE 280.1657 8.066667
Myosotis arvensis 500.0 1400.0 any 0.0010 118.80302 52 104 18.77277 18.77277 NA NA TRUE 18 31 insects 0.950 FALSE 280.5512 7.983333
Myosotis sylvatica 192.0 192.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 3.875541 FALSE 18 31 insects 0.950 FALSE 280.8248 8.733333
Onobrychis viciifolia 16.0 16.0 short-long 0.0010 118.80302 1560 1560 18.77277 18.77277 3.875541 3.875541 TRUE 18 31 insects 0.050 FALSE 281.8257 9.950000
Ononis repens 1.0 4.0 short-medium 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 23 31 insects 0.000 FALSE 282.5768 6.550000
Ononis spinosa 300.0 300.0 short-long 0.0010 118.80302 1560 1560 18.77277 18.77277 3.875541 3.875541 TRUE 23 31 insects 0.000 FALSE 281.1944 8.716667
Ophrys apifera 40000.0 40000.0 short NA NA 1560 1560 105.59588 310.48690 NA NA TRUE 18 26 insects 1.000 FALSE 283.7225 6.833333
Ophrys insectifera NA NA short NA NA 1560 1560 NA NA NA NA TRUE 18 26 insects 0.000 FALSE 281.0236 7.016667
Orchis mascula NA NA short NA NA 1560 1560 310.48690 310.48690 NA NA TRUE 18 26 insects 0.000 FALSE 281.6205 6.533333
Orchis militaris NA NA short 0.0001 25.62341 1560 1560 105.59588 310.48690 NA NA TRUE 18 26 insects 0.000 FALSE 281.0057 9.166667
Orchis purpurea 6000.0 6000.0 short NA NA 1560 1560 310.48690 310.48690 NA NA TRUE 18 26 insects 0.000 FALSE 283.7867 6.683333
Orchis tridentata NA NA short NA NA 1560 1560 NA NA NA NA TRUE 18 26 insects 0.000 FALSE 288.6735 8.050000
Origanum vulgare 4.0 4.0 short-long 0.0001 25.62341 1560 1560 18.77277 105.59588 NA NA TRUE 27 40 insects 0.000 FALSE 280.4336 9.783333
Phalaris arundinacea 3000.0 3000.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 31 wind 0.000 TRUE 280.5887 9.783333
Phleum pratense 677.0 677.0 any 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 23 35 wind 0.025 FALSE 280.0307 10.500000
Pimpinella saxifraga 268.0 9566.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 27 40 insects 0.000 FALSE 279.1678 8.283333
Plantago lanceolata 585.0 10000.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 18 44 wind 0.000 TRUE 284.8469 8.533333
Plantago major 565.0 40000.0 any 0.0003 49.45742 1560 1560 18.77277 105.59588 NA NA TRUE 23 44 wind 0.000 TRUE 283.9908 9.583333
Plantago media 282.0 7440.0 long-short 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 40 wind-insects 0.000 FALSE 279.5996 9.233333
Platanthera chlorantha NA NA short 0.0001 25.62341 1560 1560 310.48690 310.48690 3.875541 3.875541 TRUE 18 31 insects 0.000 FALSE 280.1140 7.016667
Poa annua 100.0 13000.0 any 0.0003 49.45742 1560 1560 18.77277 18.77277 NA NA TRUE 0 53 wind 0.050 TRUE 284.4375 9.450000
Poa pratensis 208.0 208.0 long-short 0.0003 49.45742 1560 1560 18.77277 105.59588 NA NA TRUE 18 26 wind 0.000 TRUE 280.0435 9.683333
Poa trivialis 299.5 299.5 any 0.0003 49.45742 1560 1560 NA NA NA NA TRUE 23 31 wind 0.000 FALSE 280.7038 8.733333
Polygala comosa 18.0 18.0 medium-short 0.0010 118.80302 1560 1560 NA NA 3.875541 385.780391 TRUE 18 26 insects 0.000 TRUE 280.1609 7.466667
Polygala vulgaris 188.0 188.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 35 insects 0.000 TRUE 279.9018 7.200000
Potentilla anserina 9.7 150.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 35 insects 0.000 FALSE 281.3451 9.083333
Potentilla neumanniana NA NA any NA NA 1560 1560 NA NA NA NA FALSE 14 26 insects 0.950 FALSE 283.0755 6.250000
Potentilla reptans NA NA any 0.0003 49.45742 1560 1560 18.77277 18.77277 NA NA TRUE 23 35 insects 0.000 FALSE 281.6585 7.933333
Primula veris 240.0 271.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 14 26 insects 0.000 FALSE 281.5454 8.500000
Prunella grandiflora 58.0 58.0 any 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 23 35 insects 0.000 FALSE 280.7381 7.566667
Prunella vulgaris 43.3 854.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 23 40 insects 0.000 TRUE 285.1315 9.600000
Ranunculus bulbosus 23.0 133.6 short-long 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 31 insects 0.000 FALSE 281.8991 7.416667
Ranunculus repens 20.0 215.3 any 0.0010 118.80302 1560 1560 18.77277 18.77277 NA NA TRUE 18 35 insects 0.000 TRUE 282.5288 8.483333
Rhinanthus angustifolius 63.5 1225.0 long-short 0.0010 118.80302 52 52 18.77277 18.77277 NA NA FALSE 23 40 insects 0.000 FALSE 281.7180 6.650000
Rhinanthus minor 19.4 187.0 long-short 0.0010 118.80302 52 52 18.77277 18.77277 NA NA FALSE 18 40 insects 0.100 FALSE 279.8482 10.266667
Rumex acetosa 45.4 2100.0 long-short 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 18 31 wind 0.000 FALSE 280.8967 7.966667
Rumex crispus 1050.0 40000.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 23 35 wind 0.000 FALSE 287.1484 10.533333
Salvia pratensis 2100.0 4605.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 35 insects 0.050 TRUE 282.3332 7.583333
Sanguisorba minor 3.0 3.0 long-short 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 35 wind 0.000 TRUE 282.4030 8.150000
Scabiosa columbaria 24.0 311.0 any 0.0010 118.80302 104 1560 18.77277 18.77277 NA NA TRUE 27 49 insects 0.000 FALSE 281.7792 6.800000
Sedum sexangulare 148.0 148.0 any 0.0001 25.62341 1560 1560 NA NA 3.875541 385.780391 TRUE 23 35 insects 0.000 TRUE 281.2399 8.216667
Senecio erucifolius 1151.5 2075.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 385.780391 TRUE 27 40 insects 0.000 FALSE 281.9572 7.933333
Senecio jacobaea 2100.0 100000.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 27 40 insects 0.000 FALSE 282.1799 5.783333
Senecio ovatus NA NA short NA NA 1560 1560 NA NA NA NA FALSE 27 40 insects 0.000 FALSE 280.0713 6.733333
Senecio vulgaris 720.0 38000.0 any 0.0003 49.45742 52 1560 18.77277 18.77277 NA NA FALSE 5 49 insects 0.950 FALSE 285.8002 8.933333
Silene dioica 220.0 9300.0 short-long 0.0010 118.80302 104 1560 52.00000 52.00000 NA NA TRUE 18 40 insects 0.000 FALSE 282.0698 7.383333
Silene nutans 255.8 255.8 short-long 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 18 35 insects 0.050 FALSE 279.9228 8.933333
Sonchus asper 330.0 600000.0 any 0.0003 49.45742 52 1560 18.77277 18.77277 NA NA FALSE 23 44 insects 0.500 FALSE 289.9740 10.116667
Stachys germanica NA NA short-long 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 35 insects 0.000 FALSE 284.6420 6.983333
Stellaria holostea 19.0 19.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 14 22 insects 0.000 TRUE 282.0927 7.083333
Stellaria media 11000.0 15000.0 any 0.0010 118.80302 52 1560 18.77277 18.77277 NA NA TRUE 0 53 insects 0.500 FALSE 285.8061 7.783333
Symphytum officinale 216.0 1400.0 medium-long 0.0010 118.80302 1560 1560 18.77277 105.59588 3.875541 3.875541 TRUE 18 31 insects 0.000 TRUE 282.1790 8.050000
Tanacetum vulgare 425.0 12500.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 27 40 insects 0.000 FALSE 280.7742 8.800000
Taraxacum laevigatum NA NA any NA NA 1560 1560 NA NA NA NA FALSE 14 26 insects 0.000 FALSE 284.2226 8.533333
Taraxacum officinale NA NA short NA NA 1560 1560 NA NA NA NA TRUE 9 44 insects 0.000 FALSE 287.2466 8.450000
Thymus pulegioides 528.5 528.5 any 0.0003 49.45742 1560 1560 105.59588 105.59588 NA NA TRUE 23 44 insects 0.000 FALSE 280.7396 8.850000
Tragopogon pratensis 190.0 190.0 any 0.0010 118.80302 104 1560 18.77277 18.77277 3.875541 149.458251 TRUE 18 31 insects 0.000 TRUE 280.7897 8.950000
Trifolium campestre 142.5 142.5 long-short 0.0010 118.80302 52 104 18.77277 18.77277 NA NA TRUE 23 40 insects 0.000 TRUE 284.8373 8.033333
Trifolium dubium 92.0 92.0 any 0.0010 118.80302 52 52 18.77277 18.77277 NA NA FALSE 18 40 insects 0.500 FALSE 284.5877 7.466667
Trifolium medium 30.0 110.0 long-short 0.0010 118.80302 1560 1560 NA NA 3.875541 3.875541 TRUE 23 35 insects 0.000 FALSE 279.1436 8.416667
Trifolium ochroleucon 275.0 275.0 long 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 23 31 insects 0.000 FALSE 283.1174 6.900000
Trifolium pratense 530.0 530.0 any 0.0010 118.80302 1560 1560 18.77277 105.59588 NA NA TRUE 23 40 insects 0.000 FALSE 284.0001 8.933333
Trifolium repens 64.0 1000.0 any 0.0010 118.80302 52 2600 18.77277 18.77277 NA NA TRUE 18 40 insects 0.000 FALSE 289.0059 8.066667
Trisetum flavescens 25000.0 25000.0 long-short 0.0003 49.45742 1560 1560 18.77277 18.77277 NA NA TRUE 18 26 wind 0.000 FALSE 281.7958 7.300000
Triticum aestivum 471.5 471.5 long 0.0010 118.80302 52 52 18.77277 18.77277 NA NA TRUE 23 31 wind 0.050 FALSE 281.4158 10.666667
Valeriana dioica 25.0 60.0 short 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 18 26 insects 0.000 FALSE 280.8733 7.266667
Valeriana officinalis 139.0 657.0 long 0.0010 118.80302 1560 1560 18.77277 18.77277 3.875541 3.875541 TRUE 18 35 insects 0.000 FALSE 279.3240 9.350000
Verbascum lychnitis 88211.0 131449.5 long-short 0.0003 49.45742 104 104 52.00000 52.00000 3.875541 385.780391 FALSE 23 35 insects 0.000 TRUE 280.6361 9.366667
Veronica chamaedrys 3.0 450.0 any 0.0003 49.45742 1560 1560 105.59588 105.59588 NA NA TRUE 18 31 insects 0.050 FALSE 281.1476 8.550000
Veronica teucrium NA NA long 0.0003 49.45742 1560 1560 NA NA NA NA FALSE 18 31 insects 0.500 FALSE 280.8409 8.700000
Vicia cracca 55.0 300.0 any 0.0010 118.80302 1560 1560 105.59588 105.59588 NA NA TRUE 23 35 insects 0.000 FALSE 280.1077 10.083333
Vicia hirsuta 12.4 300.0 any 0.0010 118.80302 52 104 18.77277 18.77277 NA NA FALSE 23 31 insects 0.500 FALSE 281.6091 9.166667
Vicia sepium 9.0 144.0 short-long 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 385.780391 TRUE 18 26 insects 0.050 FALSE 280.6096 7.916667
Vicia tenuifolia NA NA short 0.0010 118.80302 1560 1560 NA NA 3.875541 385.780391 TRUE 23 35 insects 0.000 FALSE 280.9342 8.766667
Vicia tetrasperma 12.1 450.0 any 0.0010 118.80302 52 104 18.77277 18.77277 NA NA FALSE 23 31 insects 0.950 FALSE 280.3759 8.600000
Vicia villosa 200.0 300.0 short NA NA 52 104 18.77277 18.77277 3.875541 149.458251 FALSE 23 40 insects 0.000 FALSE 288.8241 6.783333
Vincetoxicum hirundinaria NA NA short 0.0010 118.80302 1560 1560 105.59588 105.59588 3.875541 3.875541 TRUE 18 35 insects 0.000 FALSE 280.5451 8.816667
Viola hirta NA NA any 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 14 22 insects 0.050 FALSE 279.2736 8.350000
Viola odorata NA NA any 0.0010 118.80302 1560 1560 NA NA NA NA TRUE 9 17 insects 0.050 FALSE 282.3458 7.800000

8 Appendix 3: Temperature niches (Table @ref(tab:bioclim-edm-range))

bioclim_ranges.df %>%
    mk_itspp() %>%
    rename("Species" = "species",
           "Min. observed" = "observed_min",
           "Max. observed" = "observed_max",
           "Min. simulated from range" = "simrange_min",
           "Max. simulated from range" = "simrange_max",
           "Min. simulated from mean" = "simsd_min",
           "Max. simulated from mean" = "simsd_max") %>%
    knitr::kable(caption = "Trait values parameterized for the species simulated in the model.",
                 longtable = TRUE, booktabs = TRUE) %>%
  scroll_box(width = "100%", height = "700px")
Trait values parameterized for the species simulated in the model.
Species Min. observed Max. observed Min. simulated from mean Max. simulated from mean Min. simulated from range Max. simulated from range
Achillea millefolium 252.35 309.75 273.6247 298.6337 257.1091 315.5626
Acinos arvensis 259.05 305.05 273.3140 297.4421 249.0040 309.3647
Actaea spicata 251.35 298.95 271.5733 297.4515 247.2507 313.2254
Aegopodium podagraria 251.45 306.15 273.1025 296.9661 255.6090 314.8608
Agrimonia eupatoria 249.55 303.25 271.3894 300.2729 244.0023 310.0338
Ajuga genevensis 255.55 303.55 272.3586 300.3631 255.7053 314.6448
Ajuga reptans 260.25 308.75 272.2172 297.5726 245.8194 306.6639
Allium schoenoprasum 250.95 306.05 270.5958 298.1052 251.8107 314.6026
Alopecurus pratensis 251.45 304.05 272.5292 297.0672 249.8398 311.2308
Anchusa arvensis 246.45 303.85 270.4272 300.1302 249.3134 313.7804
Antennaria dioica 251.35 303.55 272.4692 295.7781 246.1211 314.8801
Anthoxanthum odoratum 258.25 305.05 269.3261 301.3453 255.3709 315.2348
Anthriscus sylvestris 257.85 302.75 272.6774 296.3065 246.7877 313.6718
Anthyllis vulneraria 256.55 306.15 270.9947 296.2885 252.6090 306.0738
Arabis hirsuta 253.55 303.55 271.7456 296.1269 248.4404 307.5185
Arrhenatherum elatius 259.45 303.85 272.4873 301.2551 254.3652 310.2552
Artemisia vulgaris 248.45 305.85 270.6277 297.5117 252.5611 309.0698
Astragalus glycyphyllos 251.25 301.75 273.6807 299.6455 254.1326 311.7298
Avenula pubescens 251.25 298.75 270.5607 300.3666 252.2766 310.9778
Bellis perennis 264.25 308.75 272.7270 297.3808 256.8908 314.9438
Brachypodium pinnatum 251.35 305.35 271.8935 296.3392 245.4206 309.2055
Briza media 256.25 308.65 269.6428 296.5647 250.0233 306.6226
Bromus erectus 265.25 302.05 270.7743 300.1759 248.8886 314.6488
Bromus hordeaceus 260.55 308.65 271.5119 296.5298 247.2014 309.4756
Calystegia sepium 251.35 307.45 272.3342 297.9916 257.3362 312.7455
Campanula glomerata 237.35 304.35 273.9455 299.5868 253.9283 314.0526
Campanula persicifolia 256.45 302.05 272.0643 299.6875 253.4816 304.6597
Campanula rapunculoides 247.95 306.05 270.2812 300.4276 251.0822 313.1695
Campanula rotundifolia 249.05 303.55 273.1328 299.8341 245.6465 306.4821
Cardaminopsis arenosa 252.55 299.95 273.1531 297.1440 253.3199 308.3215
Carduus crispus 247.45 300.55 271.3290 296.3783 254.2110 320.2363
Carex caryophyllea 252.75 303.55 270.5881 302.7003 253.5952 310.5639
Carex flacca 259.65 304.85 271.8919 297.7684 252.2577 308.2003
Carex leporina 257.35 299.95 267.3812 295.2055 246.6678 314.7086
Carex ornithopoda 255.75 300.55 270.2505 298.7570 258.1217 308.9113
Carlina vulgaris 260.35 301.25 272.9122 297.5253 250.9794 309.3439
Centaurea jacea 251.35 303.15 269.9800 297.4345 250.8622 315.3595
Centaurea scabiosa 247.05 302.85 270.5578 295.3047 249.8257 311.5345
Centaurium erythraea 251.35 309.35 272.2132 296.7777 259.1210 308.9173
Cephalanthera rubra 253.25 305.45 270.8743 300.3383 250.6122 308.3046
Cerastium arvense 248.05 307.55 272.4741 298.6873 253.1285 310.7252
Cerastium holosteoides 259.45 302.55 271.2406 297.4218 249.8849 307.7074
Cerastium tomentosum 258.35 301.75 272.7797 297.6906 253.8947 307.8256
Cerinthe minor 257.25 303.35 271.8416 296.6455 246.3815 317.8059
Chaerophyllum hirsutum 260.45 298.35 272.4356 295.4367 248.4829 312.2812
Chaerophyllum temulum 260.95 302.55 272.7020 296.9326 250.9165 308.1723
Cichorium intybus 251.35 308.95 271.5317 298.2910 250.0809 312.0060
Cirsium acaule 249.45 300.15 272.7582 300.2076 256.4536 313.0571
Cirsium arvense 251.35 305.85 271.3738 298.9929 257.2942 318.2104
Cirsium oleraceum 249.45 299.65 270.8214 295.9075 254.5082 311.6002
Cirsium tuberosum 266.15 302.25 269.3461 303.8182 249.5312 314.0168
Cirsium vulgare 255.95 307.65 271.6066 294.6168 255.0246 313.0821
Clinopodium vulgare 250.55 305.65 271.1728 298.0468 252.6103 312.4178
Convolvulus arvensis 250.85 314.95 273.1596 299.3940 252.0294 315.7364
Crepis biennis 260.75 298.75 271.5887 298.9705 251.9801 307.3669
Cruciata laevipes 252.95 307.85 272.4844 300.2366 253.5713 308.2130
Cynosurus cristatus 259.65 301.75 272.5320 298.5170 254.8729 306.4642
Dactylis glomerata 256.65 305.15 272.1734 296.0881 252.0252 308.5776
Daucus carota 257.65 309.55 266.2151 296.4998 242.1676 310.9086
Echium vulgare 251.35 306.35 271.6662 298.8043 255.2059 319.5985
Elytrigia repens 254.15 295.55 271.7866 301.5160 247.5595 309.0756
Epilobium angustifolium 245.25 309.55 272.7190 297.2752 254.4250 309.6986
Epilobium montanum 251.35 298.55 271.8989 298.2934 255.0898 310.6581
Equisetum arvense 248.05 310.55 272.4469 298.5272 250.5626 307.0044
Euphorbia cyparissias 259.65 306.05 272.1290 297.1805 250.1373 310.3564
Euphrasia officinalis 249.55 298.55 270.7311 296.1804 253.3737 312.7560
Falcaria vulgaris 254.25 303.25 271.2448 298.7681 242.7748 312.5217
Festuca ovina 253.55 298.05 270.1712 298.0657 252.9897 318.4304
Festuca rubra 256.45 301.45 269.7952 298.5459 251.5868 306.3434
Filipendula vulgaris 250.95 302.05 272.8027 299.0400 252.4541 309.9816
Fragaria vesca 252.15 307.75 270.6255 298.6630 251.5961 310.7341
Fragaria viridis 246.45 302.65 270.9948 296.7431 256.0109 310.6857
Galeopsis ladanum 246.15 301.15 270.8524 299.1296 249.0760 321.3653
Galium aparine 262.45 311.45 273.2469 299.1077 253.5623 308.0681
Galium mollugo 246.45 303.65 270.4814 300.5872 250.4915 310.5497
Galium pumilum 261.35 301.95 270.8311 296.7854 251.5226 312.8000
Galium verum 246.65 304.15 270.8931 300.2993 254.5015 313.6896
Genista tinctoria 251.35 302.95 269.6055 296.7896 255.1989 309.4719
Gentianella ciliata 260.15 300.05 269.0697 298.7851 250.5263 310.6989
Gentianella germanica 259.55 298.25 273.7234 300.2318 250.9874 312.8136
Geranium dissectum 265.65 308.85 268.3877 298.3269 250.9249 315.9469
Geranium molle 263.85 309.75 270.3815 296.7747 247.0802 308.0363
Geranium pratense 246.65 299.55 272.3537 299.5207 255.4252 310.7380
Geranium pusillum 259.05 308.55 271.6294 297.4381 258.7324 309.6532
Geranium robertianum 258.35 304.15 272.4352 295.7082 257.0052 315.6884
Geum urbanum 251.35 303.75 273.4199 294.8184 241.3466 309.0217
Gymnadenia conopsea 249.35 301.45 270.4569 297.7843 248.1068 309.7297
Helianthemum nummularium 262.75 301.55 270.2152 299.2237 251.1202 310.6222
Heracleum sphondylium 250.15 306.05 272.0801 294.0913 254.7909 309.0031
Hieracium caespitosum 245.05 304.65 269.9496 296.2858 252.1705 310.4990
Hieracium lachenalii 256.35 301.65 273.2751 298.0204 247.0449 311.0437
Hieracium murorum 256.25 303.25 271.1487 296.6456 255.4890 307.9957
Hieracium pilosella 263.55 297.95 269.7212 296.8747 250.7250 312.0693
Hippocrepis comosa 262.85 302.65 271.4856 298.9020 249.4780 314.3369
Holcus lanatus 264.75 305.85 273.3224 294.6729 253.6496 307.9926
Hypericum perforatum 251.35 309.95 271.2771 294.8068 255.0486 308.5639
Inula conyzae 266.75 302.05 270.8331 300.2475 245.2510 307.6774
Knautia arvensis 255.95 308.15 272.0622 296.6081 253.0290 306.3252
Koeleria pyramidata 260.85 302.65 270.1596 296.9766 251.3631 309.5325
Lathyrus pratensis 249.55 301.05 270.4523 300.2842 251.0022 312.3451
Leontodon hispidus 256.55 304.45 270.9493 299.0820 254.5207 310.3506
Leucanthemum vulgare 257.65 308.75 269.5561 299.0105 256.4854 310.1190
Linum catharticum 259.95 298.95 273.6085 298.3147 246.6618 309.1260
Listera ovata 258.75 300.85 272.3620 299.4758 252.3227 308.2418
Lolium perenne 254.45 310.85 273.0840 297.7496 252.8932 305.0783
Lotus corniculatus 256.85 310.25 271.7461 298.7348 252.4370 309.6788
Medicago falcata 238.35 304.75 270.3372 294.6474 251.1171 305.4840
Medicago lupulina 256.95 309.65 271.7770 299.0080 252.1482 311.7032
Melampyrum arvense 253.45 303.65 271.2757 298.8676 256.2059 311.8046
Melampyrum nemorosum 248.55 300.35 270.3743 299.2537 256.9245 304.2698
Melampyrum sylvaticum 253.35 296.35 272.9939 298.3746 255.2842 308.5237
Melilotus alba 255.55 315.35 272.4317 298.3054 248.5222 308.8095
Melilotus officinalis 246.95 312.05 273.1676 296.4933 256.4789 311.4711
Mentha arvensis 242.55 304.95 272.3733 299.0519 242.5906 309.5487
Mentha verticillata 251.65 300.05 269.0971 298.0416 249.8646 306.8079
Myosotis arvensis 255.85 303.75 272.5385 296.7756 249.7126 308.5054
Myosotis sylvatica 250.45 302.85 273.2185 299.3862 251.8009 308.6125
Onobrychis viciifolia 246.65 306.35 271.4691 295.2230 255.0357 313.0150
Ononis repens 264.25 303.55 271.8451 296.1501 250.0200 317.0258
Ononis spinosa 252.45 304.75 272.6659 302.0783 251.6941 314.3262
Ophrys apifera 264.35 305.35 271.7948 297.7441 244.8758 309.4794
Ophrys insectifera 260.05 302.15 268.5181 295.6055 250.5786 312.6568
Orchis mascula 262.85 302.05 272.8969 296.6277 254.5777 310.8084
Orchis militaris 245.85 300.85 273.1736 297.9934 254.5207 305.4910
Orchis purpurea 263.15 303.25 273.0415 296.8596 256.3494 307.1148
Orchis tridentata 258.75 307.05 269.6941 301.4955 250.6753 314.4528
Origanum vulgare 249.55 308.25 274.0968 300.4442 251.2944 311.1488
Phalaris arundinacea 248.95 307.65 270.1711 294.7533 252.3157 319.0971
Phleum pratense 249.15 312.15 272.4265 299.5177 250.4977 316.5776
Pimpinella saxifraga 249.35 299.05 271.7754 295.8550 251.6258 312.9667
Plantago lanceolata 257.65 308.85 273.2015 297.2420 254.5082 308.9142
Plantago major 251.25 308.75 270.5416 300.7215 254.2079 316.0900
Plantago media 246.65 302.05 272.8899 297.4508 254.5479 313.7314
Platanthera chlorantha 259.35 301.45 271.7834 298.4653 257.3552 309.2955
Poa annua 252.15 308.85 269.5408 297.0792 250.3715 312.5413
Poa pratensis 249.55 307.65 272.6358 296.7814 253.0372 311.9918
Poa trivialis 250.95 303.35 271.9500 300.7099 247.9520 317.0152
Polygala comosa 255.85 300.65 272.5309 295.2580 249.4942 313.0809
Polygala vulgaris 258.95 302.15 271.5567 296.7614 249.9184 311.9826
Potentilla anserina 248.75 303.25 273.2915 298.9544 247.7343 312.2421
Potentilla neumanniana 264.45 301.95 270.7874 298.7110 251.6519 308.2401
Potentilla reptans 257.05 304.65 273.4994 301.9737 240.2226 307.6577
Primula veris 253.85 304.85 270.1969 296.7496 255.5011 310.6708
Prunella grandiflora 257.15 302.55 271.0463 298.9309 246.5766 313.9353
Prunella vulgaris 251.05 308.65 271.0987 300.5537 252.8913 316.0717
Ranunculus bulbosus 263.45 307.95 273.7090 297.4774 250.8227 316.0978
Ranunculus repens 257.85 308.75 272.4487 298.3711 249.2637 308.2412
Rhinanthus angustifolius 260.35 300.25 272.4395 295.6358 253.3451 316.7658
Rhinanthus minor 241.85 303.45 272.7668 295.9907 251.9525 308.3629
Rumex acetosa 256.95 304.75 273.4273 295.6055 251.7030 313.7984
Rumex crispus 250.55 313.75 272.3423 300.3409 256.8466 316.8586
Salvia pratensis 257.55 303.05 269.8330 301.4801 248.0749 315.8269
Sanguisorba minor 259.15 308.05 271.6971 301.0292 249.4543 308.0908
Scabiosa columbaria 262.35 303.15 271.3907 295.2953 254.7933 308.3580
Sedum sexangulare 255.45 304.75 271.9041 298.5656 250.6197 316.8384
Senecio erucifolius 254.45 302.05 272.7132 296.7972 257.5888 305.7738
Senecio jacobaea 265.35 300.05 271.9109 301.4701 254.9105 315.7778
Senecio ovatus 261.35 301.75 271.3432 303.4166 253.3430 308.8671
Senecio vulgaris 260.55 314.15 272.4001 296.2222 251.4537 314.7153
Silene dioica 259.65 303.95 271.5408 295.4608 251.6519 310.6632
Silene nutans 247.45 301.05 273.9750 296.0419 253.3505 310.7741
Sonchus asper 253.75 314.45 272.5625 297.9331 246.7858 311.7656
Stachys germanica 264.35 306.25 271.9508 299.3879 253.4679 312.1167
Stellaria holostea 258.85 301.35 270.4487 298.8171 250.5873 310.2129
Stellaria media 263.25 309.95 271.9365 299.5320 249.6857 317.1198
Symphytum officinale 256.25 304.55 272.8940 293.8011 249.6729 315.5533
Tanacetum vulgare 250.95 303.75 271.3712 296.8634 255.1434 312.0101
Taraxacum laevigatum 254.65 305.85 274.3273 297.0333 258.1710 307.2489
Taraxacum officinale 263.45 314.15 271.0948 302.3491 250.2633 308.9863
Thymus pulegioides 250.55 303.65 267.8125 299.4641 256.6491 319.3788
Tragopogon pratensis 254.95 308.65 271.6778 302.8890 253.1620 320.9419
Trifolium campestre 261.35 309.55 267.3581 298.5401 252.4395 306.2908
Trifolium dubium 263.45 308.25 270.9856 301.3185 252.8330 310.8504
Trifolium medium 251.75 302.25 272.4403 296.5950 249.7976 306.6114
Trifolium ochroleucon 264.35 305.75 274.2243 296.9874 256.5960 308.7642
Trifolium pratense 253.65 307.25 273.3055 299.0891 251.9699 313.8398
Trifolium repens 261.15 309.55 273.2943 297.3369 256.9904 313.4223
Trisetum flavescens 260.15 303.95 273.3681 299.0189 254.5060 309.9008
Triticum aestivum 251.45 315.45 270.6903 295.8165 244.3551 316.7203
Valeriana dioica 254.25 297.85 274.3191 296.2704 248.7697 310.0067
Valeriana officinalis 249.05 305.15 273.5390 294.0520 251.8219 311.3888
Verbascum lychnitis 246.75 302.95 271.0822 297.4175 253.9272 314.5745
Veronica chamaedrys 251.05 302.35 270.3170 296.6113 255.1450 310.5025
Veronica teucrium 249.95 302.15 273.1595 298.4734 257.5285 311.1516
Vicia cracca 246.75 307.25 272.8860 299.2021 250.5196 307.2705
Vicia hirsuta 251.65 306.65 269.8698 296.2084 253.0681 315.5485
Vicia sepium 251.05 298.55 272.3013 296.3016 251.3703 320.3166
Vicia tenuifolia 251.15 303.75 270.3606 297.5313 251.0760 309.5666
Vicia tetrasperma 256.55 308.15 271.9840 296.4055 253.0773 317.6524
Vicia villosa 269.05 309.75 273.2232 297.3986 253.1552 315.2229
Vincetoxicum hirundinaria 251.65 304.55 271.9334 304.0549 247.2298 309.1991
Viola hirta 250.65 300.75 273.1739 299.2233 241.8610 309.0994
Viola odorata 260.65 307.45 271.7810 296.9289 248.8729 308.2617

9 Appendix 4: List of species and trait values (Table @ref(tab:edm-traits))

## compile traits processed in Data evaluation
spptraits <- traitsleda_complete_unif%>%
    ungroup()%>%
    rename(species = sp)%>%
    left_join(., pollination)%>%
    mutate(kernel = case_when(kernel == "any" ~ "long-medium-short",
                              TRUE ~ kernel))%>%
    ## reclassify seed mass and maximal mass after imputation
    mutate(seedmass = case_when(
               seedmass <= 0.0001 ~ 0.0001,
               seedmass > 0.0001 & seedmass <= 0.0003 ~ 0.0003,
               seedmass > 0.0003 ~ 0.001))%>%
    mutate(compartsize = case_when(
               seedmass == 0.0001 ~ 10,
               seedmass == 0.0003 ~ 20,
               seedmass == 0.001 ~ 50))%>%
    left_join(., dplyr::select(growth_pars, seedmass, b0grow), by="seedmass")%>%
    mutate(b0germ = b0germ)%>%
    mutate(b0mort = b0mort)%>%
                                        # Reproductive traits
    left_join(., flowerphenology_edm)%>%
    mutate(seedon = floroff - 1)%>%
    mutate(seedoff = seedon + 4)%>%
    mutate(seednumber_min = seednumber_min/(seedoff-seedon),
           seednumber_max = seednumber_max/(seedoff-seedon))%>%
    inner_join(., bioclim_edm.df)%>%
                                        #order columns
    dplyr::select(species, kernel, clonality, pollen_vector, 
                  self_failoutcross = selfing_at_failoutcross,
                  seedmass, compartsize, self_proba, span_min, span_max, firstflower_min,
                  firstflower_max, bankduration_max, bankduration_min,  seednumber_min, 
                  seednumber_max,   b0grow, b0germ, b0mort, floron, floroff,
                  seedon,   seedoff, 
                  temp_opt, temp_tol)

## Festuca pratensis is missing from the gbif
spptraits[which(species == "Festuca pratensis"), "temp_opt"] <- spptraits[which(species == "Festuca rubra"), "temp_opt"]
spptraits[which(species == "Festuca pratensis"), "temp_tol"] <- spptraits[which(species == "Festuca rubra"), "temp_tol"]

write.csv(spptraits, file.path(EDMdocsdir, "spp_traits" ,"EDM_spptraits.csv"),
          row.names = FALSE)
write.csv(spptraits, file.path(EDMdir, "template_files" ,"EDM_spptraits.csv"),
          row.names = FALSE)
edm_traits %>%
    mk_itspp() %>%
    rename("Species" = "species",
           "Kernel" = "kernel",
           "Clonality" = "clonality",
           "Pollen vector" = "pollen_vector",
           "Selfing" = "self_failoutcross",
           "Seed biomass" = "seedmass",
           "Allocation size" = "compartsize",
           "Prob. selfing" = "self_proba",
           "Min. life span" = "span_min",
           "Max. life span" = "span_max",
           "Min. age 1st flower" = "firstflower_min",
           "Max. age 1st flower" = "firstflower_max",
           "Max. seed bank" = "bankduration_max",
           "Min. seed bank" = "bankduration_min",
           "Min. seeds" = "seednumber_min",
           "Max. seeds" = "seednumber_max",
           "Norm. constant growth" = "b0grow",
           "Norm. constant germ." = "b0germ",
           "Norm. constant mort" = "b0mort",
           "Begin flowering" = "floron",
           "End flowering" = "floroff",
           "Begin sowing" = "seedon",
           "End sowing" = "seedoff",
           "Temp. optimum" = "temp_opt",
           "Temp. tolerance" = "temp_tol") %>%
  knitr::kable(caption = "Final trait values defined for the species input used in the first implementation of the model, Figueiredo et al. (in prep.)",
               longtable = TRUE, booktabs = TRUE) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  scroll_box(width = "100%", height = "700px")
Final trait values defined for the species input used in the first implementation of the model, Figueiredo et al. (in prep.)
Species Kernel Clonality Pollen vector Selfing Seed biomass Allocation size Prob. selfing Min. life span Max. life span Min. age 1st flower Max. age 1st flower Max. seed bank Min. seed bank Min. seeds Max. seeds Norm. constant growth Norm. constant germ. Norm. constant mort Begin flowering End flowering Begin sowing End sowing Temp. optimum Temp. tolerance
Achillea millefolium long-medium-short TRUE insects FALSE 0.0003 20 0.000 1560 1560 18.772773 105.595880 109.590564 7.110712 47.5000 1800.000 5963719581 141363714 1113239249 23 44 43 47 285.6251 9.566667
Acinos arvensis long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 385.780391 3.875541 85.5000 85.500 8058178821 141363714 1113239249 23 40 39 43 278.8466 7.666667
Actaea spicata long TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 3.875541 3.875541 27.0000 475.000 8058178821 141363714 1113239249 18 26 25 29 278.4126 7.933333
Aegopodium podagraria long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 385.780391 3.875541 11.6250 2675.000 8058178821 141363714 1113239249 23 31 30 34 280.6411 9.116667
Agrimonia eupatoria long-medium-short TRUE insects FALSE 0.0010 50 0.950 1560 1560 105.595880 105.595880 149.458251 3.875541 16.5000 16.500 8058178821 141363714 1113239249 23 40 39 43 280.4205 8.950000
Ajuga genevensis long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 385.780391 3.875541 55.2500 55.250 8058178821 141363714 1113239249 14 26 25 29 281.5398 8.000000
Ajuga reptans short-medium TRUE insects TRUE 0.0010 50 0.000 1560 2600 105.595880 105.595880 122.684719 7.110712 9.0000 26.250 8058178821 141363714 1113239249 18 35 34 38 283.3404 8.083333
Allium schoenoprasum short-long TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 140.741479 7.110712 1037.2500 1037.250 8058178821 141363714 1113239249 23 35 34 38 280.3545 9.183333
Alopecurus pratensis long-short TRUE wind FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.626250 7.110712 103.5000 103.500 8058178821 141363714 1113239249 18 26 25 29 280.7221 8.766667
Anchusa arvensis long-medium FALSE insects TRUE 0.0010 50 0.000 52 104 18.772773 18.772773 149.458251 3.875541 32.0000 175.000 8058178821 141363714 1113239249 18 40 39 43 281.2234 9.566667
Antennaria dioica long-short TRUE insects FALSE 0.0001 10 0.000 1560 2600 105.595880 105.595880 3.875541 3.875541 70.0000 70.000 4531446957 141363714 1113239249 18 26 25 29 278.2855 8.700000
Anthoxanthum odoratum long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.825074 7.110712 27.0000 259.625 8058178821 141363714 1113239249 18 26 25 29 281.2262 7.800000
Anthriscus sylvestris long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.226599 7.110712 33.0250 2500.000 8058178821 141363714 1113239249 18 35 34 38 281.5486 7.483333
Anthyllis vulneraria long TRUE insects FALSE 0.0010 50 0.500 52 1560 26.000000 26.000000 385.780391 3.875541 7.5000 48.500 8058178821 141363714 1113239249 18 35 34 38 280.7263 8.266667
Arabis hirsuta long-short TRUE insects FALSE 0.0001 10 0.500 1560 1560 105.595880 105.595880 81.543282 7.110712 187.5000 187.500 4531446957 141363714 1113239249 18 31 30 34 280.1182 8.333333
Arrhenatherum elatius long-short TRUE wind FALSE 0.0010 50 0.050 1560 1560 18.772773 18.772773 170.580602 7.110712 2.5000 2.500 8058178821 141363714 1113239249 23 44 43 47 281.2127 7.400000
Artemisia vulgaris long-medium-short TRUE insects FALSE 0.0003 20 0.000 1560 1560 18.772773 105.595880 39.577009 7.110712 50000.0000 125000.000 5963719581 141363714 1113239249 27 49 48 52 283.0275 9.566667
Astragalus glycyphyllos long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 139.019233 7.110712 2578.7500 2578.750 8058178821 141363714 1113239249 23 31 30 34 279.8322 8.416667
Avenula pubescens short-long TRUE wind FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 140.783097 7.110712 1000.0000 1000.000 8058178821 141363714 1113239249 18 26 25 29 279.8673 7.916667
Brachypodium pinnatum short-long TRUE wind FALSE 0.0010 50 0.000 1560 1560 78.283972 102.511805 146.757600 7.110712 21.7500 21.750 8058178821 141363714 1113239249 23 31 30 34 281.0725 9.000000
Bellis perennis long-medium-short TRUE insects FALSE 0.0003 20 0.500 1560 1560 105.595880 105.595880 95.782183 7.110712 322.0000 322.000 5963719581 141363714 1113239249 0 49 48 52 283.4846 7.416667
Briza media short-long TRUE wind FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.346279 7.110712 44.7500 1827.000 8058178821 141363714 1113239249 18 26 25 29 279.9232 8.733333
Bromus erectus long TRUE wind FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 44 43 47 281.7318 6.133333
Bromus hordeaceus long TRUE wind FALSE 0.0010 50 0.950 52 104 18.772773 18.772773 218.104238 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 35 34 38 282.5224 8.016667
Calystegia sepium long-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 385.780391 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 23 40 39 43 282.3955 9.350000
Campanula glomerata short-long TRUE insects TRUE 0.0003 20 0.000 52 1560 26.000000 26.000000 149.458251 3.875541 5113.3643 17367.398 5963719581 141363714 1113239249 23 40 39 43 277.7940 11.166667
Campanula persicifolia long-short TRUE insects FALSE 0.0001 10 0.000 104 1560 18.772773 18.772773 115.372483 7.110712 6514.3144 21841.484 4531446957 141363714 1113239249 23 40 39 43 279.8406 7.600000
Campanula rotundifolia long-short TRUE insects FALSE 0.0001 10 0.000 1560 1560 18.772773 18.772773 94.852415 7.110712 6514.3144 21841.484 4531446957 141363714 1113239249 23 44 43 47 279.3996 9.083333
Campanula rapunculoides long-medium-short TRUE insects FALSE 0.0003 20 0.000 1560 1560 18.772773 105.595880 98.990475 7.110712 5113.3643 17367.398 5963719581 141363714 1113239249 23 40 39 43 279.5601 9.683333
Cardaminopsis arenosa long TRUE insects FALSE 0.0003 20 0.000 52 1560 18.772773 18.772773 149.458251 149.458251 5113.3643 17367.398 5963719581 141363714 1113239249 14 35 34 38 280.3846 7.900000
Carduus crispus long-medium-short FALSE insects FALSE 0.0010 50 0.000 104 104 52.000000 52.000000 385.780391 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 27 40 39 43 279.9315 8.850000
Carex caryophyllea medium TRUE wind FALSE 0.0010 50 0.000 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 14 22 21 25 280.5223 8.466667
Carex flacca long-medium-short TRUE wind FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 156.145247 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 31 30 34 281.1753 7.533333
Carex leporina short FALSE wind FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 23 31 30 34 279.1100 7.100000
Carex ornithopoda long-medium-short TRUE wind FALSE 0.0010 50 0.000 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 22 21 25 278.5075 7.466667
Carlina vulgaris long-medium-short TRUE insects TRUE 0.0010 50 0.000 52 1560 18.772773 18.772773 173.485193 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 27 40 39 43 280.7739 6.816667
Centaurea jacea long-medium-short FALSE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 49 48 52 280.4447 8.633333
Centaurea scabiosa long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 156.145247 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 27 35 34 38 279.9491 9.300000
Centaurium erythraea short-long FALSE insects FALSE 0.0001 10 0.950 52 1560 17.398469 47.747222 111.678497 7.110712 6514.3144 21841.484 4531446957 141363714 1113239249 27 35 34 38 284.0660 9.666667
Cephalanthera rubra short TRUE insects FALSE 0.0010 50 0.500 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 23 31 30 34 281.1061 8.700000
Cerastium arvense long-short TRUE insects TRUE 0.0003 20 0.000 1560 2600 18.772773 105.595880 79.795809 7.110712 5113.3643 17367.398 5963719581 141363714 1113239249 14 31 30 34 281.0167 9.916667
Cerastium holosteoides short FALSE insects TRUE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 9 26 25 29 281.2091 7.183333
Cerastium tomentosum long-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 18.772773 18.772773 169.978778 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 31 30 34 281.0699 7.233333
Cerinthe minor short-long TRUE insects TRUE 0.0010 50 0.000 104 1560 18.772773 18.772773 172.665941 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 18 31 30 34 280.6468 7.683333
Chaerophyllum hirsutum short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 26 25 29 280.2983 6.316667
Chaerophyllum temulum short-long FALSE insects FALSE 0.0010 50 0.000 52 104 6.331742 9.276826 149.458251 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 18 31 30 34 282.3427 6.933333
Cichorium intybus long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 149.458251 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 27 44 43 47 283.5332 9.600000
Cirsium acaule long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 27 40 39 43 280.5920 8.450000
Cirsium arvense long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 27 40 39 43 281.8333 9.083333
Cirsium oleraceum long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 18.772773 169.978778 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 40 39 43 280.1936 8.366667
Cirsium tuberosum long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 18.772773 3.875541 3.875541 1472.4605 5739.778 8058178821 141363714 1113239249 27 35 34 38 282.1654 6.016667
Cirsium vulgare long-medium-short FALSE insects FALSE 0.0010 50 0.000 52 1560 18.772773 18.772773 191.231706 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 40 39 43 283.7613 8.616667
Clinopodium vulgare long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 27 40 39 43 280.3037 9.183333
Convolvulus arvensis long-medium-short TRUE insects FALSE 0.0010 50 0.500 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 40 39 43 284.1778 10.683333
Crepis biennis long-medium-short FALSE insects TRUE 0.0010 50 0.000 104 104 18.772773 18.772773 217.371379 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 35 34 38 281.6483 6.333333
Cruciata laevipes long TRUE insects FALSE 0.0010 50 0.000 52 1560 18.772773 18.772773 3.875541 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 14 26 25 29 282.3399 9.150000
Cynosurus cristatus long-medium-short TRUE wind FALSE 0.0010 50 0.500 1560 1560 18.772773 105.595880 156.145247 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 31 30 34 281.0622 7.016667
Dactylis glomerata long-short TRUE wind TRUE 0.0010 50 0.050 1560 1560 18.772773 105.595880 156.145247 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 31 30 34 282.0465 8.083333
Daucus carota long-medium-short TRUE insects TRUE 0.0010 50 0.050 1560 1560 18.772773 105.595880 156.145247 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 40 39 43 285.5320 8.650000
Echium vulgare long-medium-short FALSE insects FALSE 0.0010 50 0.000 104 104 18.772773 18.772773 385.780391 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 18 31 30 34 282.0942 9.166667
Elytrigia repens long-medium-short FALSE wind FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 23 35 34 38 279.0669 6.900000
Epilobium angustifolium long-medium-short TRUE insects FALSE 0.0001 10 0.050 1560 1560 18.772773 18.772773 94.852415 7.110712 6514.3144 21841.484 4531446957 141363714 1113239249 27 35 34 38 279.1531 10.716667
Epilobium montanum long-medium-short TRUE insects FALSE 0.0003 20 0.950 1560 1560 18.772773 18.772773 112.824005 7.110712 5113.3643 17367.398 5963719581 141363714 1113239249 23 40 39 43 279.5080 7.866667
Equisetum arvense long-medium-short FALSE wind FALSE 0.0001 10 0.500 1560 1560 63.036330 105.045780 74.979452 7.110712 6514.3144 21841.484 4531446957 141363714 1113239249 9 17 16 20 281.6585 10.416667
Euphorbia cyparissias long-medium-short TRUE insects FALSE 0.0010 50 0.050 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 14 22 21 25 282.5568 7.733333
Euphrasia officinalis long-medium-short FALSE insects TRUE 0.0003 20 0.000 52 52 18.772773 18.772773 149.458251 3.875541 5113.3643 17367.398 5963719581 141363714 1113239249 18 44 43 47 279.2117 8.166667
Falcaria vulgaris long-medium-short TRUE insects FALSE 0.0010 50 0.000 52 1560 26.000000 26.000000 3.875541 3.875541 500.0000 500.000 8058178821 141363714 1113239249 27 40 39 43 281.5397 8.166667
Festuca ovina long-short TRUE wind FALSE 0.0010 50 0.000 104 1560 52.000000 52.000000 181.360109 7.110712 211.7500 211.750 8058178821 141363714 1113239249 18 35 34 38 279.3919 7.416667
Festuca pratensis long-short TRUE wind FALSE 0.0010 50 0.000 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 31 30 34 279.8448 7.500000
Festuca rubra long-medium-short TRUE wind FALSE 0.0010 50 0.000 104 1560 39.427771 52.331844 183.414557 7.110712 116.2500 116.250 8058178821 141363714 1113239249 23 31 30 34 279.8448 7.500000
Filipendula vulgaris short-long TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 3.875541 3.875541 28.2500 109.825 8058178821 141363714 1113239249 23 31 30 34 280.5264 8.516667
Fragaria vesca long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.831881 7.110712 56.2500 85.250 8058178821 141363714 1113239249 18 26 25 29 282.1414 9.266667
Fragaria viridis short-long TRUE insects FALSE 0.0010 50 0.000 1560 1560 310.486899 310.486899 83.123572 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 26 25 29 278.8633 9.366667
Galeopsis ladanum long-medium FALSE insects TRUE 0.0010 50 0.000 52 52 18.772773 18.772773 221.118505 7.110712 75.0000 75.000 8058178821 141363714 1113239249 23 44 43 47 279.7941 9.166667
Galium aparine long FALSE insects FALSE 0.0010 50 0.950 52 104 18.772773 18.772773 220.186553 7.110712 7.7500 250.000 8058178821 141363714 1113239249 23 44 43 47 287.8325 8.166667
Galium mollugo long-short TRUE insects FALSE 0.0010 50 0.050 1560 1560 18.772773 18.772773 169.213543 7.110712 433.5000 5000.000 8058178821 141363714 1113239249 18 31 30 34 280.4929 9.533333
Galium pumilum short-long TRUE insects FALSE 0.0010 50 0.050 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 27 40 39 43 281.4022 6.766667
Galium verum short-long TRUE wind-insects FALSE 0.0010 50 0.025 1560 1560 105.595880 105.595880 141.892395 7.110712 3.1500 26.025 8058178821 141363714 1113239249 23 40 39 43 280.0749 9.583333
Genista tinctoria short-long TRUE insects FALSE 0.0010 50 0.000 1560 1560 89.879767 119.343549 3.875541 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 23 35 34 38 280.7595 8.600000
Gentianella ciliata short TRUE insects FALSE 0.0003 20 0.050 104 1560 52.000000 52.000000 3.875541 3.875541 167.5000 167.500 5963719581 141363714 1113239249 32 44 43 47 280.3280 6.650000
Gentianella germanica short FALSE insects TRUE 0.0003 20 0.000 52 104 18.772773 18.772773 174.418046 7.110712 40.0000 148.500 5963719581 141363714 1113239249 23 44 43 47 280.6513 6.450000
Geranium dissectum long-short FALSE insects TRUE 0.0010 50 0.000 52 104 18.772773 18.772773 220.171780 7.110712 23.7500 250.000 8058178821 141363714 1113239249 18 35 34 38 285.2910 7.200000
Geranium molle long-short FALSE insects FALSE 0.0010 50 0.950 52 104 18.772773 18.772773 385.780391 3.875541 20.2500 25.000 8058178821 141363714 1113239249 18 44 43 47 284.3925 7.650000
Geranium pratense long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.899512 7.110712 0.7500 0.750 8058178821 141363714 1113239249 23 35 34 38 279.9600 8.816667
Geranium pusillum long-medium-short FALSE insects FALSE 0.0010 50 0.950 52 1560 18.772773 18.772773 193.253455 7.110712 75.0000 187.500 8058178821 141363714 1113239249 18 44 43 47 280.8284 8.250000
Geranium robertianum long-medium-short FALSE insects FALSE 0.0010 50 0.950 52 104 18.772773 18.772773 220.220719 7.110712 7.5000 75.000 8058178821 141363714 1113239249 18 44 43 47 282.1439 7.633333
Geum urbanum long TRUE insects FALSE 0.0010 50 0.950 1560 1560 18.772773 105.595880 155.686450 7.110712 43.0000 81.125 8058178821 141363714 1113239249 18 44 43 47 281.6276 8.733333
Gymnadenia conopsea short TRUE insects FALSE 0.0001 10 0.000 1560 1560 105.595880 105.595880 3.875541 3.875541 7924.7500 7924.750 4531446957 141363714 1113239249 18 35 34 38 278.6253 8.683333
Helianthemum nummularium long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.832477 7.110712 60.7500 60.750 8058178821 141363714 1113239249 23 44 43 47 280.1858 6.466667
Heracleum sphondylium long-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.219106 7.110712 212.5000 2501.250 8058178821 141363714 1113239249 23 40 39 43 283.5358 9.316667
Hieracium caespitosum long-medium-short TRUE insects FALSE 0.0003 20 0.050 1560 1560 18.772773 18.772773 3.875541 3.875541 153.0000 153.000 5963719581 141363714 1113239249 18 35 34 38 281.5453 9.933333
Hieracium lachenalii short FALSE insects FALSE 0.0010 50 0.050 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 23 35 34 38 280.7973 7.550000
Hieracium murorum long-medium-short TRUE insects FALSE 0.0010 50 0.050 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 35 34 38 280.0843 7.833333
Hieracium pilosella long-medium-short TRUE insects FALSE 0.0003 20 0.050 1560 1560 18.772773 105.595880 109.974990 7.110712 5.2500 18.750 5963719581 141363714 1113239249 18 44 43 47 282.3518 5.733333
Hippocrepis comosa long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.866833 7.110712 30.0000 30.000 8058178821 141363714 1113239249 18 31 30 34 281.8446 6.633333
Holcus lanatus long-medium-short TRUE wind FALSE 0.0010 50 0.500 1560 1560 18.772773 105.595880 106.303418 7.110712 44250.0000 44250.000 8058178821 141363714 1113239249 23 35 34 38 282.6703 6.850000
Hypericum perforatum long-medium-short TRUE insects FALSE 0.0001 10 0.050 1560 1560 105.595880 105.595880 79.452138 7.110712 759.0000 8250.000 4531446957 141363714 1113239249 27 35 34 38 282.1337 9.766667
Inula conyzae long-medium-short FALSE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 23 44 43 47 282.6778 5.883333
Knautia arvensis long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 310.486899 106.764162 7.110712 16.5000 500.000 8058178821 141363714 1113239249 27 35 34 38 280.4889 8.700000
Koeleria pyramidata long-short TRUE wind FALSE 0.0010 50 0.000 1560 1560 78.242321 102.473579 146.736558 7.110712 52.3750 52.375 8058178821 141363714 1113239249 23 31 30 34 281.7134 6.966667
Lathyrus pratensis long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.718570 7.110712 9.5000 75.000 8058178821 141363714 1113239249 23 35 34 38 279.4419 8.583333
Leontodon hispidus long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.723208 7.110712 16.5000 17.750 8058178821 141363714 1113239249 23 44 43 47 280.8981 7.983333
Leucanthemum vulgare long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 18.772773 18.772773 169.307675 7.110712 16.5250 6500.000 8058178821 141363714 1113239249 23 44 43 47 282.6034 8.516667
Linum catharticum long-medium-short TRUE insects FALSE 0.0003 20 0.950 52 1560 18.772773 18.772773 147.589150 7.110712 2.8500 45.750 5963719581 141363714 1113239249 23 31 30 34 280.3002 6.500000
Listera ovata short TRUE insects FALSE 0.0010 50 0.050 1560 1560 105.595880 310.486899 3.875541 3.875541 5250.0000 37500.000 8058178821 141363714 1113239249 18 26 25 29 280.2161 7.016667
Lolium perenne long-medium-short TRUE wind FALSE 0.0010 50 0.000 52 1560 18.772773 18.772773 191.231706 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 18 44 43 47 286.1423 9.400000
Lotus corniculatus long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 154.789620 7.110712 86.2500 4500.000 8058178821 141363714 1113239249 23 35 34 38 281.5991 8.900000
Medicago falcata long-medium-short FALSE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 23 40 39 43 278.8608 11.066667
Medicago lupulina long-medium-short TRUE insects FALSE 0.0010 50 0.500 52 1560 18.772773 18.772773 193.016018 7.110712 25.0000 1650.000 8058178821 141363714 1113239249 18 44 43 47 287.8328 8.783333
Melampyrum arvense long-medium FALSE insects FALSE 0.0010 50 0.000 52 104 18.772773 18.772773 149.458251 3.875541 2.5000 10.000 8058178821 141363714 1113239249 23 40 39 43 281.3895 8.366667
Melampyrum nemorosum medium FALSE insects TRUE 0.0010 50 0.000 52 52 18.772773 18.772773 3.875541 3.875541 3.0000 109.500 8058178821 141363714 1113239249 18 40 39 43 279.1104 8.633333
Melampyrum sylvaticum medium-long FALSE insects TRUE 0.0010 50 0.000 52 52 18.772773 18.772773 3.875541 3.875541 2.3500 19.000 8058178821 141363714 1113239249 23 40 39 43 278.0563 7.166667
Melilotus alba long-short FALSE insects TRUE 0.0010 50 0.000 52 104 26.000000 26.000000 199.897132 7.110712 1071.8750 87500.000 8058178821 141363714 1113239249 23 40 39 43 283.4032 9.966667
Melilotus officinalis long-medium-short FALSE insects TRUE 0.0010 50 0.000 52 104 18.772773 18.772773 215.371175 7.110712 25.0000 25000.000 8058178821 141363714 1113239249 14 40 39 43 282.2428 10.850000
Mentha arvensis long TRUE insects FALSE 0.0003 20 0.000 1560 1560 105.595880 105.595880 96.127741 7.110712 4.8750 50.000 5963719581 141363714 1113239249 23 44 43 47 278.4783 10.400000
Mentha verticillata long-medium-short FALSE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 27 35 34 38 280.1657 8.066667
Myosotis arvensis long-medium-short TRUE insects FALSE 0.0010 50 0.950 52 104 18.772773 18.772773 220.058900 7.110712 125.0000 350.000 8058178821 141363714 1113239249 18 31 30 34 280.5512 7.983333
Myosotis sylvatica long-medium-short FALSE insects FALSE 0.0010 50 0.950 1560 1560 105.595880 105.595880 3.875541 3.875541 48.0000 48.000 8058178821 141363714 1113239249 18 31 30 34 280.8248 8.733333
Onobrychis viciifolia short-long TRUE insects FALSE 0.0010 50 0.050 1560 1560 18.772773 18.772773 3.875541 3.875541 4.0000 4.000 8058178821 141363714 1113239249 18 31 30 34 281.8257 9.950000
Ononis repens short-medium TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 18.772773 170.582970 7.110712 0.2500 1.000 8058178821 141363714 1113239249 23 31 30 34 282.5768 6.550000
Ononis spinosa short-long TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 18.772773 3.875541 3.875541 75.0000 75.000 8058178821 141363714 1113239249 23 31 30 34 281.1944 8.716667
Ophrys apifera short TRUE insects FALSE 0.0010 50 1.000 1560 1560 105.595880 310.486899 61.763858 7.110712 10000.0000 10000.000 8058178821 141363714 1113239249 18 26 25 29 283.7225 6.833333
Ophrys insectifera short TRUE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 18 26 25 29 281.0236 7.016667
Orchis mascula short TRUE insects FALSE 0.0010 50 0.000 1560 1560 310.486899 310.486899 79.624843 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 18 26 25 29 281.6205 6.533333
Orchis militaris short TRUE insects FALSE 0.0001 10 0.000 1560 1560 105.595880 310.486899 36.356334 7.110712 6514.3144 21841.484 4531446957 141363714 1113239249 18 26 25 29 281.0057 9.166667
Orchis purpurea short TRUE insects FALSE 0.0010 50 0.000 1560 1560 310.486899 310.486899 52.673546 7.110712 1500.0000 1500.000 8058178821 141363714 1113239249 18 26 25 29 283.7867 6.683333
Orchis tridentata short TRUE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 18 26 25 29 288.6735 8.050000
Origanum vulgare short-long TRUE insects FALSE 0.0001 10 0.000 1560 1560 18.772773 105.595880 95.593185 7.110712 1.0000 1.000 4531446957 141363714 1113239249 27 40 39 43 280.4336 9.783333
Phalaris arundinacea long-medium-short TRUE wind TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.062410 7.110712 750.0000 750.000 8058178821 141363714 1113239249 23 31 30 34 280.5887 9.783333
Phleum pratense long-medium-short TRUE wind FALSE 0.0010 50 0.025 1560 1560 78.083368 102.327697 146.656256 7.110712 169.2500 169.250 8058178821 141363714 1113239249 23 35 34 38 280.0307 10.500000
Pimpinella saxifraga long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.374734 7.110712 67.0000 2391.500 8058178821 141363714 1113239249 27 40 39 43 279.1678 8.283333
Plantago lanceolata long-medium-short TRUE wind TRUE 0.0010 50 0.000 52 1560 18.772773 18.772773 192.739234 7.110712 146.2500 2500.000 8058178821 141363714 1113239249 18 44 43 47 284.8469 8.533333
Plantago major long-medium-short TRUE wind TRUE 0.0003 20 0.000 1560 1560 18.772773 105.595880 107.913881 7.110712 141.2500 10000.000 5963719581 141363714 1113239249 23 44 43 47 283.9908 9.583333
Plantago media long-short TRUE wind-insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.316104 7.110712 70.5000 1860.000 8058178821 141363714 1113239249 18 40 39 43 279.5996 9.233333
Platanthera chlorantha short TRUE insects FALSE 0.0001 10 0.000 1560 1560 310.486899 310.486899 3.875541 3.875541 6514.3144 21841.484 4531446957 141363714 1113239249 18 31 30 34 280.1140 7.016667
Poa annua long-medium-short TRUE wind TRUE 0.0003 20 0.050 1560 1560 18.772773 18.772773 124.171669 7.110712 25.0000 3250.000 5963719581 141363714 1113239249 0 53 52 56 284.4375 9.450000
Poa pratensis long-short TRUE wind TRUE 0.0003 20 0.000 1560 1560 18.772773 105.595880 109.925377 7.110712 52.0000 52.000 5963719581 141363714 1113239249 18 26 25 29 280.0435 9.683333
Poa trivialis long-medium-short TRUE wind FALSE 0.0003 20 0.000 1560 1560 82.981780 120.228460 97.161759 7.110712 74.8750 74.875 5963719581 141363714 1113239249 23 31 30 34 280.7038 8.733333
Polygala comosa medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 54.296164 69.486893 385.780391 3.875541 4.5000 4.500 8058178821 141363714 1113239249 18 26 25 29 280.1609 7.466667
Polygala vulgaris long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.689375 7.110712 47.0000 47.000 8058178821 141363714 1113239249 18 35 34 38 279.9018 7.200000
Potentilla anserina long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.890839 7.110712 2.4250 37.500 8058178821 141363714 1113239249 18 35 34 38 281.3451 9.083333
Potentilla neumanniana long-medium-short FALSE insects FALSE 0.0010 50 0.950 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 14 26 25 29 283.0755 6.250000
Potentilla reptans long-medium-short TRUE insects FALSE 0.0003 20 0.000 1560 1560 18.772773 18.772773 112.824005 7.110712 5113.3643 17367.398 5963719581 141363714 1113239249 23 35 34 38 281.6585 7.933333
Primula veris long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.831812 7.110712 60.0000 67.750 8058178821 141363714 1113239249 14 26 25 29 281.5454 8.500000
Prunella grandiflora long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 78.293832 102.520854 146.762582 7.110712 14.5000 14.500 8058178821 141363714 1113239249 23 35 34 38 280.7381 7.566667
Prunella vulgaris long-medium-short TRUE insects TRUE 0.0010 50 0.000 52 1560 18.772773 18.772773 193.307668 7.110712 10.8250 213.500 8058178821 141363714 1113239249 23 40 39 43 285.1315 9.600000
Ranunculus bulbosus short-long TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.730099 7.110712 5.7500 33.400 8058178821 141363714 1113239249 18 31 30 34 281.8991 7.416667
Ranunculus repens long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 18.772773 18.772773 170.568341 7.110712 5.0000 53.825 8058178821 141363714 1113239249 18 35 34 38 282.5288 8.483333
Rhinanthus angustifolius long-short FALSE insects FALSE 0.0010 50 0.000 52 52 18.772773 18.772773 221.128254 7.110712 15.8750 306.250 8058178821 141363714 1113239249 23 40 39 43 281.7180 6.650000
Rhinanthus minor long-short FALSE insects FALSE 0.0010 50 0.100 52 52 18.772773 18.772773 221.188756 7.110712 4.8500 46.750 8058178821 141363714 1113239249 18 40 39 43 279.8482 10.266667
Rumex acetosa long-short TRUE wind FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.788064 7.110712 11.3500 525.000 8058178821 141363714 1113239249 18 31 30 34 280.8967 7.966667
Rumex crispus long-medium-short TRUE wind FALSE 0.0010 50 0.000 52 1560 18.772773 18.772773 191.177517 7.110712 262.5000 10000.000 8058178821 141363714 1113239249 23 35 34 38 287.1484 10.533333
Salvia pratensis long-medium-short TRUE insects TRUE 0.0010 50 0.050 1560 1560 18.772773 105.595880 155.033887 7.110712 525.0000 1151.250 8058178821 141363714 1113239249 18 35 34 38 282.3332 7.583333
Sanguisorba minor long-short TRUE wind TRUE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.741048 7.110712 0.7500 0.750 8058178821 141363714 1113239249 18 35 34 38 282.4030 8.150000
Scabiosa columbaria long-medium-short TRUE insects FALSE 0.0010 50 0.000 104 1560 18.772773 18.772773 192.553080 7.110712 6.0000 77.750 8058178821 141363714 1113239249 27 49 48 52 281.7792 6.800000
Sedum sexangulare long-medium-short TRUE insects TRUE 0.0001 10 0.000 1560 1560 62.993035 93.284943 385.780391 3.875541 37.0000 37.000 4531446957 141363714 1113239249 23 35 34 38 281.2399 8.216667
Senecio erucifolius long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 385.780391 3.875541 287.8750 518.750 8058178821 141363714 1113239249 27 40 39 43 281.9572 7.933333
Senecio jacobaea long-medium-short TRUE insects FALSE 0.0010 50 0.000 52 1560 18.772773 18.772773 188.026383 7.110712 525.0000 25000.000 8058178821 141363714 1113239249 27 40 39 43 282.1799 5.783333
Senecio ovatus short FALSE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 27 40 39 43 280.0713 6.733333
Senecio vulgaris long-medium-short FALSE insects FALSE 0.0003 20 0.950 52 1560 18.772773 18.772773 145.592239 7.110712 180.0000 9500.000 5963719581 141363714 1113239249 5 49 48 52 285.8002 8.933333
Silene dioica short-long TRUE insects FALSE 0.0010 50 0.000 104 1560 52.000000 52.000000 181.095047 7.110712 55.0000 2325.000 8058178821 141363714 1113239249 18 40 39 43 282.0698 7.383333
Silene nutans short-long TRUE insects FALSE 0.0010 50 0.050 1560 1560 18.772773 105.595880 155.670437 7.110712 63.9500 63.950 8058178821 141363714 1113239249 18 35 34 38 279.9228 8.933333
Sonchus asper long-medium-short FALSE insects FALSE 0.0003 20 0.500 52 1560 18.772773 18.772773 118.436898 7.110712 82.5000 150000.000 5963719581 141363714 1113239249 23 44 43 47 289.9740 10.116667
Stachys germanica short-long TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 144.127994 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 23 35 34 38 284.6420 6.983333
Stellaria holostea long-medium-short TRUE insects TRUE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.895043 7.110712 4.7500 4.750 8058178821 141363714 1113239249 14 22 21 25 282.0927 7.083333
Stellaria media long-medium-short TRUE insects FALSE 0.0010 50 0.500 52 1560 18.772773 18.772773 190.092700 7.110712 2750.0000 3750.000 8058178821 141363714 1113239249 0 53 52 56 285.8061 7.783333
Symphytum officinale medium-long TRUE insects TRUE 0.0010 50 0.000 1560 1560 18.772773 105.595880 3.875541 3.875541 54.0000 350.000 8058178821 141363714 1113239249 18 31 30 34 282.1790 8.050000
Tanacetum vulgare long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.196255 7.110712 106.2500 3125.000 8058178821 141363714 1113239249 27 40 39 43 280.7742 8.800000
Taraxacum laevigatum long-medium-short FALSE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 14 26 25 29 284.2226 8.533333
Taraxacum officinale short TRUE insects FALSE 0.0010 50 0.000 1560 1560 76.966511 105.261698 130.743676 7.110712 1472.4605 5739.778 8058178821 141363714 1113239249 9 44 43 47 287.2466 8.450000
Thymus pulegioides long-medium-short TRUE insects FALSE 0.0003 20 0.000 1560 1560 105.595880 105.595880 95.994321 7.110712 132.1250 132.125 5963719581 141363714 1113239249 23 44 43 47 280.7396 8.850000
Tragopogon pratensis long-medium-short TRUE insects TRUE 0.0010 50 0.000 104 1560 18.772773 18.772773 149.458251 3.875541 47.5000 47.500 8058178821 141363714 1113239249 18 31 30 34 280.7897 8.950000
Trifolium campestre long-short TRUE insects TRUE 0.0010 50 0.000 52 104 18.772773 18.772773 220.202386 7.110712 35.6250 35.625 8058178821 141363714 1113239249 23 40 39 43 284.8373 8.033333
Trifolium dubium long-medium-short FALSE insects FALSE 0.0010 50 0.500 52 52 18.772773 18.772773 221.176603 7.110712 23.0000 23.000 8058178821 141363714 1113239249 18 40 39 43 284.5877 7.466667
Trifolium medium long-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 89.181933 118.634286 3.875541 3.875541 7.5000 27.500 8058178821 141363714 1113239249 23 35 34 38 279.1436 8.416667
Trifolium ochroleucon long TRUE insects FALSE 0.0010 50 0.000 1560 1560 78.220050 102.453140 146.725307 7.110712 68.7500 68.750 8058178821 141363714 1113239249 23 31 30 34 283.1174 6.900000
Trifolium pratense long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 105.595880 155.593849 7.110712 132.5000 132.500 8058178821 141363714 1113239249 23 40 39 43 284.0001 8.933333
Trifolium repens long-medium-short TRUE insects FALSE 0.0010 50 0.000 52 2600 18.772773 18.772773 174.093581 7.110712 16.0000 250.000 8058178821 141363714 1113239249 18 40 39 43 289.0059 8.066667
Trisetum flavescens long-short TRUE wind FALSE 0.0003 20 0.000 1560 1560 18.772773 18.772773 117.842149 7.110712 6250.0000 6250.000 5963719581 141363714 1113239249 18 26 25 29 281.7958 7.300000
Triticum aestivum long TRUE wind FALSE 0.0010 50 0.050 52 52 18.772773 18.772773 221.070603 7.110712 117.8750 117.875 8058178821 141363714 1113239249 23 31 30 34 281.4158 10.666667
Valeriana dioica short TRUE insects FALSE 0.0010 50 0.000 1560 1560 78.300865 102.526838 146.767958 7.110712 6.2500 15.000 8058178821 141363714 1113239249 18 26 25 29 280.8733 7.266667
Valeriana officinalis long TRUE insects FALSE 0.0010 50 0.000 1560 1560 18.772773 18.772773 3.875541 3.875541 34.7500 164.250 8058178821 141363714 1113239249 18 35 34 38 279.3240 9.350000
Verbascum lychnitis long-short FALSE insects TRUE 0.0003 20 0.000 104 104 52.000000 52.000000 385.780391 3.875541 22052.7500 32862.375 5963719581 141363714 1113239249 23 35 34 38 280.6361 9.366667
Veronica chamaedrys long-medium-short TRUE insects FALSE 0.0003 20 0.050 1560 1560 105.595880 105.595880 96.119430 7.110712 0.7500 112.500 5963719581 141363714 1113239249 18 31 30 34 281.1476 8.550000
Veronica teucrium long FALSE insects FALSE 0.0003 20 0.500 1560 1560 67.366755 105.105784 92.342268 7.110712 5113.3643 17367.398 5963719581 141363714 1113239249 18 31 30 34 280.8409 8.700000
Vicia cracca long-medium-short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 141.873110 7.110712 13.7500 75.000 8058178821 141363714 1113239249 23 35 34 38 280.1077 10.083333
Vicia hirsuta long-medium-short FALSE insects FALSE 0.0010 50 0.500 52 104 18.772773 18.772773 220.224782 7.110712 3.1000 75.000 8058178821 141363714 1113239249 23 31 30 34 281.6091 9.166667
Vicia sepium short-long TRUE insects FALSE 0.0010 50 0.050 1560 1560 105.595880 105.595880 385.780391 3.875541 2.2500 36.000 8058178821 141363714 1113239249 18 26 25 29 280.6096 7.916667
Vicia tenuifolia short TRUE insects FALSE 0.0010 50 0.000 1560 1560 56.233035 71.316394 385.780391 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 23 35 34 38 280.9342 8.766667
Vicia tetrasperma long-medium-short FALSE insects FALSE 0.0010 50 0.950 52 104 18.772773 18.772773 220.217579 7.110712 3.0250 112.500 8058178821 141363714 1113239249 23 31 30 34 280.3759 8.600000
Vicia villosa short FALSE insects FALSE 0.0010 50 0.000 52 104 18.772773 18.772773 149.458251 3.875541 50.0000 75.000 8058178821 141363714 1113239249 23 40 39 43 288.8241 6.783333
Vincetoxicum hirundinaria short TRUE insects FALSE 0.0010 50 0.000 1560 1560 105.595880 105.595880 3.875541 3.875541 210.0389 1708.098 8058178821 141363714 1113239249 18 35 34 38 280.5451 8.816667
Viola hirta long-medium-short TRUE insects FALSE 0.0010 50 0.050 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 14 22 21 25 279.2736 8.350000
Viola odorata long-medium-short TRUE insects FALSE 0.0010 50 0.050 1560 1560 81.167382 105.328987 147.551845 7.110712 210.0389 1708.098 8058178821 141363714 1113239249 9 17 16 20 282.3458 7.800000